究竟什么是Spring Boot,和普通Spring项目有什么区别
背景
最近我们打算重构设计一个公共包,其中涉及到的一个命题就是公共包要不要引入Spring Boot。那么问题来了究竟什么是Spring Boot 呢
Spring简介
Spring框架为开发Java应用程序提供了全面的基础架构支持。
它包含一些很好的功能,如依赖注入和开箱即用的模块,如:
Spring JDBC
Spring MVC
Spring Security
Spring AOP
Spring ORM
Spring Test
这些模块可以大大缩短应用程序的开发时间。
Spring Boot 简介
Spring Boot是在Spring的基础上面搭设的框架,目的是为了简化Spring项目的搭设和开发过程。
Spring Boot 特性
自动配置 Spring-boot-starter 开箱即用依赖模块
简化统一配置文件
监控管理actuator
内嵌了如Tomcat,Jetty,所有的依赖都打到一个jar包里面,可以直接java -jar 运行
自动配置 Spring-boot-starter 开箱即用依赖模块
通过@SpringBootApplication注解配置一个Spring Boot项目。
它是一个组合注解包含了@EnableAutoConfiguration注解来启动自动配置。
该注解利用@Condition相关的注解来扫描class path路径下引入的jar包,容器中的bean对象,以及配置文件中的相关属性,来自动配置,并注入相关的bean对象。
SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了相关场景的spring-boot-starter,相关的技术配置就会被简化甚至不需要配置,就可以得到SpringBoot自动配置的Bean。
参考Spring Boot文档 Starters章节
举例:
如果我们需要应用需要web的话需要引入spring-web spring-webmvc等几个依赖,还需部署tomcat容器,配置 web.xml文件(上下文,DispatcherServlet,mapping等)
如果是Spring boot的话只需要引入spring-boot-starter-web 其他的都会自动配置且注入好。简洁,省事。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1
2
3
4
SpringBoot还帮助我们统一做了版本管理,只需引入>spring-boot-starter-parent的版本号即可,Spring Boot有做大量的版本兼容测试,因此可以避免我们自己设置版本导致的兼容问题。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
1
2
3
4
5
6
在spring-boot-starter-parent中定义
<properties>
<activemq.version>5.15.4</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.64</appengine-sdk.version>
<artemis.version>2.4.0</artemis.version>
<aspectj.version>1.8.13</aspectj.version>
<assertj.version>3.9.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
<byte-buddy.version>1.7.11</byte-buddy.version>
<caffeine.version>2.6.2</caffeine.version>
<cassandra-driver.version>3.4.0</cassandra-driver.version>
<classmate.version>1.3.4</classmate.version>
<commons-codec.version>1.11</commons-codec.version>
<commons-dbcp2.version>2.2.0</commons-dbcp2.version>
<commons-lang3.version>3.7</commons-lang3.version>
<commons-pool.version>1.6</commons-pool.version>
...
</properties>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
简化统一配置文件
Spring 相关的xml配置文件,全部采用@Configuration代码的方式配置处理,不需要再维护一堆散乱无章的xml文件
应用相关的配置默认用application-*.yml配置。约定优先,不再需要直接配置文件
提供了@ConfigurationProperties注解将配置项自动转换为javaBean对象方便使用
监控管理actuator
监控管理是生产级别必不可少的组件。项目中添加了spring-boot-starter-actuator依赖和少许的配置,及可以实现应用的监控和管理功能
<dependencies>
<dependency>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-starter-actuator </ artifactId>
</ dependency>
</ dependencies>
1
2
3
4
5
6
可以http或者jmx的方式连接。
出于安全考虑并不会所有的端口都默认打开,需要在配置文件中配置需要打开的端口
有如下端口
健康
环境变量
Spring MVC映射url
关闭服务
加载class列表
自动配置结果
缓存
session
dump
…
参考Spring Boot文档Actuator章节
结论
Spring Boot是在Spring的基础上面搭设的框架,目的是为了简化Spring项目的搭设和开发过程。不存在冲突的问题。
它提供了如下特性如果有需求则可以引入
自动配置 Spring-boot-starter 开箱即用依赖模块
简化统一配置文件
监控管理actuator
内嵌了如Tomcat,Jetty,所有的依赖都打到一个jar包里面,可以直接java -jar 运行