spring boot 入门_Spring Boot 2.0 的快速入门(图文教程)

Spring Boot 2.0 的快速入门(图文教程)

大家都知道,Spring Framework 是 Java/Spring 应用程序跨平台开发框架,也是 Java EE(Java Enterprise Edition) 轻量级框架,其 Spring 平台为 Java 开发者提供了全面的基础设施支持。 虽然 Spring 基础组件的代码是轻量级,但其配置依旧是重量级的。

那是怎么解决了呢?当然是 Spring Boot,Spring Boot 提供了新的编程模式,让开发 Spring 应用变得更加简单方便。本书将会由各个最佳实践工程出发,涉及 Spring Boot 开发相关的各方面。下面先了解下 Spring Boot 框架。

1.1 Spring Boot 是什么

Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 java -jar 、SpringApplication 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。

1.1.1 Spring Boot 2.x 特性

Spring Boot 2.x 具有哪些生产的特性呢?常用特性如下:

  • SpringApplication 应用类
  • 自动配置
  • 外化配置
  • 内嵌容器
  • Starter 组件

还有对日志、Web、消息、测试及扩展等支持。

SpringApplication

SpringApplication 是 Spring Boot 应用启动类,在 main() 方法中调用 SpringApplication.run() 静态方法,即可运行一个 Spring Boot 应用。简单使用代码片段如下:

public static void main(String[] args) { SpringApplication.run(QuickStartApplication.class, args);}

Spring Boot 运行的应用是独立的一个 Jar 应用,实际上在运行时启动了应用内部的内嵌容器,容器初始化 Spring 环境及其组件并启动应用。也可以使用 Spring Boot 开发传统的应用,只要通过 Spring Boot Maven 插件将 Jar 应用转换成 War 应用即可。

自动配置

Spring Boot 在不需要任何配置情况下,就直接可以运行一个应用。实际上,Spring Boot 框架的 spring-boot-autoconfigure 依赖做了很多默认的配置项,即应用默认值。这种模式叫做 “自动配置”。Spring Boot 自动配置会根据添加的依赖,自动加载依赖相关的配置属性并启动依赖。例如,默认用的内嵌式容器是 Tomcat ,端口默认设置为 8080。

外化配置

Spring Boot 简化了配置,在 application.properties 文件配置常用的应用属性。Spring Boot 可以将配置外部化,这种模式叫做 “外化配置”。将配置从代码中分离外置,最明显的作用是只要简单地修改下外化配置文件,就可以在不同环境中,可以运行相同的应用代码。

内嵌容器

Spring Boot 启动应用,默认情况下是自动启动了内嵌容器 Tomcat,并且自动设置了默认端口为 8080。另外还提供了对 Jetty、Undertow 等容器的支持。开发者自行在添加对应的容器 Starter 组件依赖,即可配置并使用对应内嵌容器实例。

Starter 组件

Spring Boot 提供了很多 “开箱即用” 的 Starter 组件。Starter 组件是可被加载在应用中的 Maven 依赖项。只需要在 Maven 配置中添加对应的依赖配置,即可使用对应的 Starter 组件。例如,添加 spring-boot-starter-web 依赖,就可用于构建 REST API 服务,其包含了 Spring MVC 和 Tomcat 内嵌容器等。

开发中,很多功能是通过添加 Starter 组件的方式来进行实现。那么,Spring Boot 2.x 常用的 Starter 组件有哪些呢?

1.1.2 Spring Boot 2.x Starter 组件

Spring Boot 官方提供了很多 Starter 组件,涉及 Web、模板引擎、SQL 、NoSQL、缓存、验证、日志、测试、内嵌容器,还提供了事务、消息、安全、监控、大数据等支持。前面模块会在本书中一一介绍,后面这些模块本书不会涉及,如需自行请参看 Spring Boot 官方文档。

每个模块会有多种技术实现选型支持,来实现各种复杂的业务需求:

  • Web:Spring Web、Spring WebFlux 等
  • 模板引擎:Thymeleaf、FreeMarker、Groovy、Mustache 等
  • SQL:MySQL 、H2 等
  • NoSQL:Redis、MongoDB、Cassandra、Elasticsearch 等
  • 验证框架:Hibernate Validator、Spring Validator 等
  • 日志框架:Log4j2、Logback 等
  • 测试:JUnit、Spring Boot Test、AssertJ、Mockito 等
  • 内嵌容器:Tomcat、Jetty、Undertow 等

另外,Spring WebFlux 框架目前支持 Servlet 3.1 以上的 Servlet 容器和 Netty,各种模块组成了 Spring Boot 2.x 的工作常用技术栈,如图 1-1 所示。

5000e9d418b84b7faaef99dc54af0f72

图 1-1 Spring Boot 技术架构

正如白猫黑猫,能抓住老鼠的就是好猫。在上述技术选型中,需要为公司业务的要求和团队技能选择最有效最合适的设计方案、架构和编程模型。

1.1.3 Spring Boot 应用场景

Spring Boot 模块众多,代表着应用场景也非常广泛,包括 Web 应用、SOA 及微服务等。在 Web 应用中,Spring Boot 封装了 Spring MVC 即可以提供 MVC 模式开发传统的 Web,又可以开发 REST API ,来开发 Web、APP、Open API 各种应用。在 SOA 及微服务中,用 Spring Boot 可以包装每个服务,本身可以提供轻量级 REST API 服务接口。也可以整合流行的 RPC 框架(Dubbo 等),提供 RPC 服务接口,只要简单地加入对应的 Starter 组件即可。在微服务实战中,推荐使用 Spring Cloud,是一套基于 Spring Boot 实现分布式系统的工具,适用于构建微服务。

上面从组件和特性两方面介绍了 Spring Boot 2.x,下面快速入门去了解 Spring Boot 2.x 的基本用法。

1.2 快速入门工程

在搭建一个 Spring Boot 工程应用前,需要配置好开发环境及安装好开发工具:

  • JDK 1.8+
  • Spring Boot 2.x 要求 JDK 1.8 环境及以上版本。另外,Spring Boot 2.x 只兼容 Spring Framework 5.0 及以上版本。
  • Maven 3.2+
  • 为 Spring Boot 2.x 提供了相关依赖构建工具是 Maven,版本需要 3.2 及以上版本。使用 Gradle 则需要 1.12 及以上版本。本书使用 Maven 对 Spring Boot 工程进行依赖和构建管理。
  • IntelliJ IDEA
  • IntelliJ IDEA (简称 IDEA)是常用的开发工具,也是本书推荐使用的。同样使用 Eclipse IDE,也能完成本书的实践案例。另外,本书的工程都会在 GitHub 上开源,如需要请自行安装 Git 环境。

注意:

JDK 安装、Maven 安装、Git 安装和 IntelliJ IDEA 开发工具安装详解,见附录 A

安装环境虽然耗时,但磨刀不误砍柴工。下面开发 “Hello Spring Boot” 工程,大致分下面三个步骤:

  • 创建工程
  • 开发工程
  • 运行工程

1.2.1 创建工程 “Hello Spring Boot”

在 IDEA 中,利用 Spring Initializr 插件进行创建名为 chapter-1-spring-boot-quickstart 工程。具体工程创建方式可见 1.3.1 章节。

第一步,打开 IDEA,选择新建工程按钮,然后选择左侧栏 Spring Initializr 选项。默认选择 JDK 版本和 Spring Initializr 的网站地址。如果是封闭式内网开发,也可以搭建一个 Spring Initializr 的内网服务。如图 1-2 所示。

6ea384e0bf7a43bbbfa5bb144cdfa1dc

图 1-2 创建工程之选择使用 Spring Initializr

第二步,点击下一步,输入 Maven 工程信息。这里对应的 Maven 信息为:

  • groupId:demo.springboot
  • artifactId:chapter-1-spring-boot-quickstart
  • version:1.0

这里还可以设置工程的名称和描述等,如图 1-3 所示。

dc4ed3efb05d42a9910f1cdeb21ee1c1

图 1-3 创建工程之新建工程信息

第三步,点击下一步,在依赖选择可视化操作中,下拉选择 Spring Boot 版本号和勾选工程需要的 Starter 组件和其他依赖。这里选择 Web 依赖,为了去实现一个简单的 REST API 服务,即访问 GET:/hello 会返回 “Hello,Spring Boot!” 的字符串。如图 1-4 所示。

d2c1fd25cac44ea69afa787212f8ec0e

图 1-4 创建工程之选择 Web 依赖

这样就创建好名为 chapter-1-spring-boot-quickstart 工程,使用 IDEA 提示打开工程即可。

1.2.2 开发工程之 Pom 依赖

在 pom.xml 配置文件中,parent 节点配置是 Spring Boot 的 Parent 依赖,代码如下:

org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE

spring-boot-starter-parent 依赖,是 Spring Boot 提供的一个特殊的 Starter 组件,本身没有任何依赖。

spring-boot-starter-parent 职责,一方面是用于提供 Maven 配置的默认值,即在 Spring Boot 2.x 中设置 JDK 1.8 为默认编译级别、设置 UTF-8 编码等。另一方面,其父依赖 spring-boot-dependencies 中的 dependency-management 节点提供了所有 Starter 组件依赖配置的缺省版本值,但不提供依赖本身的继承。这样的作用是使用各个组件依赖拿来即用,不需要指定 version 。

因为创建工程时,勾选 Web 依赖,Spring Initializr 会自动添加 Web 依赖,代码如下:

org.springframework.boot spring-boot-starter-web

正如上面所说,这里只需要加入 groupId 和 artifactId 即可,不需要配置 version。

1.2.3 开发工程之应用启动类

在工程 src 目录中,已经自动创建了包目录 demo.springboot ,其包下自动创建了 Spring Boot 应用启动类,代码如下:

@SpringBootApplicationpublic class QuickStartApplication { public static void main(String[] args) { SpringApplication.run(QuickStartApplication.class, args); }}

Spring Boot 应用启动类,是可以用来启动 Spring Boot 应用。其包含了 @SpringBootApplication 注解和SpringApplication 类,并调用 SpringApplication 类的 run() 方法,就可以启动该应用。

@SpringBootApplication 注解

@SpringBootApplication 注解用标注启动类,被标注的类为一个配置类,并会触发自动配置和 Starter 组件扫描。根据源码可得,该注解配置了 @SpringBootConfiguration、 @EnableAutoConfiguration 和 @ComponentScan 三个注解, @SpringBootConfiguration 注解又配置了 @EnableAutoConfiguration 。所以该注解的职责相当于结合了@Configuration, @EnableAutoConfiguration 和 @ComponentScan 三个注解功能。

@SpringBootApplication 注解的职责如下:

  • 在被该注解修饰的类中,可以用 @Bean 注解来配置多个 Bean 。应用启动时,Spring 容器会加载 Bean 并注入到 Spring 容器。
  • 启动 Spring 上下文的自动配置。基于依赖和定义的 Bean 会自动配置需要的 Bean 和类。
  • 扫描被 @Configuration 修饰的配置类。也会扫描 Starter 组件的配置类,并启动加载其默认配置

SpringApplication 类

大多数情况下,在 main 方法中调用 SpringApplication 类的静态方法 run(Class, String[]) ,用来引导启动 Spring 应用程序。默认情况下,该类的职责会执行如下步骤:

  • 创建应用上下文 ApplicationContext 实例
  • 注册 CommandLinePropertySource,将命令行参数赋值到 Spring 属性
  • 刷新应用上下文,加载所有单例
  • 触发所有 CommandLineRunner Bean

在实际开发中如果需要自定义创建高级的配置,可以通过 run(Class, String[]) 方法的第二个参数,并以 String 数组的形式传入。这是 run 几个重载方法的 API 文档:

API org.springframework.boot.SpringApplication

  • static run(Class>[] primarySources, String[] args)
  • 返回正在运行的应用上下文 ApplicationContext
  • 参数:
  • primarySources 应用指定的主要类源,数组形式
  • args 应用参数
  • static run(Class> primarySource, String... args)
  • 返回正在运行的应用上下文 ApplicationContext
  • 参数:
  • primarySource 应用指定的主要类源
  • args 应用参数
  • run(String... args)
  • 返回正在运行的应用上下文 ApplicationContext
  • 参数:
  • args 应用参数

1.2.4 开发工程之 Hello 控制层类

在工程中新建包目录 demo.springboot.web ,并在目录中创建名为 HelloController 的控制层类,代码如下:

import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class HelloController { @RequestMapping(value = "/hello
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目一Spark离线处理本项目来源于企业级电商网站的大数据统计分析平台,该平台以 Spark 框架为核心,对电商网站的日志进行离线和实时分析。 该大数据分析平台对电商网站的各种用户行为(访问行为、购物行为、广告点击行为等)进行分析,根据平台统计出来的数据,辅助公司中的 PM(产品经理)、数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务。最终达到用大数据技术来帮助提升公司的业绩、营业额以及市场占有率的目标。 本项目使用了 Spark 技术生态栈中最常用的三个技术框架,Spark Core、Spark SQL 和 Spark Streaming,进行离线计算和实时计算业务模块的开发。实现了包括用户访问 session 分析、页面单跳转化率统计、热门商品离线统计、广告流量实时统计 4 个业务模块。通过合理的将实际业务模块进行技术整合与改造,该项目几乎完全涵盖了 Spark Core、Spark SQL 和 Spark Streaming 这三个技术框架中大部分的功能点、知识点,学员对于 Spark 技术框架的理解将会在本项目中得到很大的提高。 项目二Spark实时处理项目简介对于实时性要求高的应用,如用户即时详单查询,业务量监控等,需要应用实时处理架构项目场景对于实时要求高的应用、有对数据进行实时展示和查询需求时项目技术分别使用canal和kafka搭建各自针对业务数据库和用户行为数据的实时数据采集系统,使用SparkStreaming搭建高吞吐的数据实时处理模块,选用ES作为最终的实时数据处理结果的存储位置,并从中获取数据进行展示,进一步降低响应时间。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值