spring boot 特性
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组件
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 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” 工程,大致分下面三个步骤:
创建工程
利用 spring Initializr 插件创建工程
开发工程
1.Pom 依赖
parent 节点配置是 Spring Boot 的 Parent 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/>
</parent>
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
2.应用启动类
在工程 src 目录中,已经自动创建了包目录 demo.springboot ,其包下自动创建了 Spring Boot 应用启动类,代码如下:
@SpringBootApplication
public 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 应用参数
3.控制层
在工程中新建包目录 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;
@Controller
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
@ResponseBody
public String sayHello() {
return "Hello,Spring Boot!";
}
}
上面定义了简单的 REST API 服务,即 GET:/hello。表示该 Hello 控制层 sayHello() 方法会提供请求路径为 /hello 和请求方法为 GET 的 HTTP 服务接口。Spring 4.0 的注解 @RestController 支持实现 REST API 控制层。本质上,该注解结合了 @Controller 和 @ResponseBody 的功能。所以将上面 HelloController 可以改造升级成 HelloBookController,代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloBookController {
@RequestMapping(value = "/book/hello",method = RequestMethod.GET)
public String sayHello() {
return "Hello,《Spring Boot 2.x 核心技术实战 - 上 基础篇》!";
}
}
spring mvc 知识点
@Controller 注解
@Controller 对控制层类进行标注,职责是使控制层可以处理 HTTP 请求,简单可以理解为,使控制层能接受请求,处理请求并响应。
@RequestMapping 注解
@RequestMapping 对控制层类的方法进行标注,职责是标明方法对应的 HTTP 请求路由的关系映射。参数 value 主要请求映射地址,可接受多个地址。参数 method 标注 HTTP 方法,常用如: GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE,TRACE。默认是 GET HTTP 方法,在 GET 请求的情况下,可以缩写成 @RequestMapping(value = "/book/hello") 。Spring 4 支持直接使用 XXXMapping 形式的注解,比如上面代码可以写成 @GetMapping("/book/hello")。
@ResponseBody 注解
@ResponseBody 对控制层类的方法进行标注,职责是指定响应体为方法的返回值。上面代码中,案例是以字符串的形式返回,自然可以使用其他复杂对象作为返回体。
运行工程
maven编译工程
使用 IDEA 右侧工具栏,点击 Maven Project Tab ,点击使用下 Maven 插件的 install 命令
cd chapter-1-spring-boot-quickstart
mvn clean install
```在 target 目录中看到 chapter-1-spring-boot-quickstart-1.0.jar 文件生成,或者在编译的控制台中看到成功的输出
运行工程三种方式
1.在 IDEA 中执行 QuickStartApplication 类启动,任意正常模式或者 Debug 模式。可以在控制台看到成功运行的输出
2.通过 Maven 运行,需要配置 Spring Boot Maven 插件,在 pom.xml 配置文件中,新增 build 节点并配置插件 spring-boot-maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在工程根目录中,运行如下 Maven 命令来运行 Spring Boot 应用:
mvn spring-boot:run
实际调用的是 pom.xml 配置的 Spring Boot Maven 插件 spring-boot-maven-plugin ,上面执行了插件提供的 run 指令。也可以在 IDEA 右侧工具栏的 Maven Project Tab 中,找到 Maven 插件的 spring-boot-maven-plugin,执行相应的指令
生成构建信息文件
spring-boot:build-info
帮助信息
spring-boot:help
重新打包
spring-boot:repackage
运行工程
spring-boot:run
将工程集成到集成测试阶段,进行工程的声明周期管理
spring-boot:start
spring-boot:stop
3.java命令
使用 Maven 或者 Gradle 安装工程,生成可执行的工程 jar 后,运行如下 Java 命令来运行 Spring Boot 应用:
java -jar target/chapter-1-spring-boot-quickstart-1.0.jar
这里运行了 spring-boot-maven-plugin 插件编译出来的可执行 jar 文件
#服务器部署
基础环境安装如上面说的,需要 JDK 环境、Maven 环境等
1.5.1 Win 服务器
推荐使用 AlwaysUp:
![file](https://upload-images.jianshu.io/upload_images/14139287-6cd1fef3e3573bd4.jpeg)
使用方式也很简单:
![file](https://upload-images.jianshu.io/upload_images/14139287-05ed3b0cd7de0969.jpeg)
1.5.2 Linux 服务器
推荐 yum 安装基础环境,比如安装 JDK:
yum -y list java*
yum -y install java-1.8.0-openjdk*
java -version
安装 Maven:
yum -y list apache-maven
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven
mvn --v
Linux 使用 nohup 命令进行对后台程序的启动关闭。
关闭应用的脚本:stop.sh
![file](https://upload-images.jianshu.io/upload_images/14139287-bfab05b13066a350.jpeg)
启动应用的脚本:start.sh
![file](https://upload-images.jianshu.io/upload_images/14139287-a545545254ab9b78.jpeg)
重启应用的脚本:stop.sh
![file](https://upload-images.jianshu.io/upload_images/14139287-e4131bd94404f5f3.jpeg)
> 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布!