整理自《JavaEE开发的颠覆者 SpringBoot实战》
1、什么是SpringBoot
随着动态语言的流行,Java的开发显得格外笨重,繁重的配置、低下的开发效率、复杂的部署流程及第三方技术使用难度大。
为此,SpringBoot应运而生,它使用“习惯优于配置
”的理念让项目快速运行起来。使用SpringBoot可以很容易创建一个独立运行(运行jar,内嵌Servlet容器)
、准生产级别的基于Spring框架的项目,使用SpirngBoot你可以不用或者只需要很少的Spring配置。
2、SpringBoot核心功能
- 独立运行的Spring项目
以jar包形式独立运行,运行一个Spring Boot项目只需通过java -jar xxx.jar来运行。 - 内嵌Servlet容器
可选择内嵌Tomcat、Jetty或Undertom,这样我们无需以war包形式部署项目。 - 提供starter简化Maven配置
SpringBoot提供了一系列的starter pom来简化Maven依赖加载 - 自动配置Spring
SpringBoot会根据在类路径中的jar包、类,为jar包里的类自动配置bean,这样会极大减少我们自己需要进行的配置。 - 准生产的应用监控
SpringBoot提供基于http、ssh、telnet对运行时的项目进行监控。 - 无代码生成和xml配置
SpringBoot的神奇不是借助于代码生成来实现的,而是通过条件注解来实现的,这是Spring 4.x提供的新特性。Spring 4.x提倡使用Java配置和注解配置组合,而SpringBoot不需要任何xml配置即可实现Spring的所有配置。
3、SpringBoot项目快速搭建
IntelliJ IDEA
新建Spring Initializer项目,填写项目信息,选择项目使用技术,填写项目名称。
项目勾选Spring web,之后生成的pom.xml文件主体内容:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springBootDemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Maven手工搭建
1、新建空的Maven项目
2、修改pom.xml
- 添加Spring Boot的父级依赖,这样当前项目就是SpringBoot项目了。spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- 在dependencies添加项目要使用的技术,如web支持的starter pom,这样就添加了Web依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 添加SpringBoot的编译插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4、基本配置
入口类和@SpringBootApplication
SpringBoot通常有一个名为*Application的入口类,该类中有一个main方法,它其实就是一个标准的Java应用的入口方法。在main方法中使用SpringApplication.run(xxx.class, args) ,启动SpringBoot应用项目。
@SpringBootApplication
源码:
其中,@EnableAutoConfiguration让SpringBoot根据类路径中的jar包依赖为当前项目进行自动配置
。例如,添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和Spring MVC进行自动配置。
SpringBoot会自动扫描@SpringBootApplication所在类的同级包,以及下级包里的Bean。建议入口类放置的位置在groupIg+artifactID组合的报名下。
关闭特定的自动配置
使用@SpringBootApplication注解的exclude参数,如:
@SpringBootApplication(exclude={DataSourceAutoComfiguration.class})
定制Banner
SpringBoot的配置文件
SpingBoot使用一个全局的配置文件application.properties
或application.yml
,放置在src/main/resources目录或者类路径的/config下。
SpringBoot的全局配置文件的作用是对一些默认配置的配置值进行修改
。
示例:修改Tomcat的默认端口号和默认访问路径:
application.properties中:
application.yml中:
starter pom
SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需的starter pom,相关的技术配置将会消除,就可以得到SpringBoot为我们提供的自动配置的bean。
1、 官方starter pom
2、第三方starter pom
使用xml配置
SpringBoot提倡零配置,即无xml配置,但在实际项目中,可能有一些特殊要求你必须使用xml配置,这是我们就可以通过Spring提供的@ImportResource来加载xml配置,如:
5、外部配置
SpringBoot可以是基于properties文件、yaml文件或者命令行参数作为外部配置。
命令行参数配置
例如:java -jar xx.jar --server.port=9090
常规属性配置
在Spring中,可以通过@PropertySource指明properties文件的位置,通过@Value注入properties文件中的值。在SpringBoot中,我们只需在appliaction.properties定义属性,直接使用@Value注入即可。
类型安全的配置(基于properties)
SpringBoot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。
JavaEE的颠覆者 SpringBoot实战 - 6.2.3
6、日志配置
7、Profile配置
Profile是Spring用来针对不同环境对不同的配置提供支持的,全局Profile配置使用application-{profile}.properties(如application-prod.properties)。
通过在application.properties中设置spring.profile.active = prod来指定活动的Profile。
8、SpringBoot运行原理
可以通过下面三种方式查看当前项目中已启用和未启用的自动配置报告:
- 运行jar时增加–debug参数:
java -jar xx.jar --debug
- 在application.properties中设置属性:
debug=true
- 在STS中设置
此时启动,可在控制台输出。已启用的自动配置为:
未启用的自动配置为: