1. Spring Boot 是什么
从
2002
年开始,
Spring
一直在飞速的发展,如今已经成为了在
Java EE
开发中真正意义上的标准,但是随着
技术的发展,
Java EE
使用
Spring
逐渐变得笨重起来,大量的
XML
文件存在于项目之中。繁琐的配置,整合
第三方框架的配置问题,导致了开发和部署效率的降低。
2012
年
10
月
Mike Youngstrom
在
Spring jira
中创建了一个功能请求,要求在
Spring
框架中支持无容器
Web
应用程序体系结构。他谈到了在主容器引导
spring
容器内配置
Web
容器服务。这是
jira
请求的摘录:我认为
Spring
的
Web
应用体系结构可以大大简化,如果它提供了从上到下利用
Spring
组件和配置模型的工具和参考
体系结构。在简单的
main()
方法引导的
Spring
容器内嵌入和统一这些常用
Web
容器服务的配置。
这一要求促使了
2013
年初开始的
Spring Boot
项目的研发,到今天
Spring Boot
的版本已经到了
3.2.0
。
Spring
Boot
并不是用来替代
Spring
的解决方案,而是和
Spring
框架紧密结合用于提升
Spring
开发者体验的工具。
它集成了大量常用的第三方库配置,
Spring Boot
应用中这些第三方库几乎可以是零配置的开箱即用
out of the
box
,大部分的
Spring Boot
应用都只需要非常少量的
Java
配置代码,开发者能够更加专注于业务逻辑。
2.为什么学习Spring boot
2.1 从 Spring 官方来看
打开
Spring
的官方网站
http://spring.io/
。可以看到官方对
Spring Boot
的定位:
Build Anything
,
Build
任何东
西。
Spring Boot
旨在尽可能快地启动和运行,并且只需最少的
Spring
前期配置。同时也可以看到官方两个的
定位:
1
、
SpringCloud
:
Coordinate Anything
协调任何事情;
2
、
SpringCloud Data Flow
:
Connect everything
连接任何东西。
Spring
官网对
Spring Boot
、
SpringCloud
和
SpringCloud Data Flow
三者定位的措辞非常有味道,同时也可以
看出,
Spring
官方对这三个技术非常重视,是现在以及今后学习的重点。
2.2 从 Spring Boot 的优点来看
1
、减少开发,测试时间和努力。
2
、使用
JavaConfig
有助于避免使用
XML
。
3
、避免大量的
Maven
导入和各种版本冲突。
4
、提供意见发展方法。
5
、通过提供默认值快速开始开发。
6
、没有单独的
Web
服务器需要。这意味着你不再需要启动
Tomcat
,
Glassfish
或其他任何东西。
7
、需要更少的配置因为没有
web.xml
文件。只需添加用
Configuration
注释的类,然后添加用
Bean
注释的方
法,
Spring
将自动加载对象并像以前一样对其进行管理。您甚至可以将
Autowired
添加到
bean
方法中,以使
SpringBoot 教程
Spring
自动装入需要的依赖关系中。
8
、基于环境的配置使用这些属性,可以将正在使用的环境传递到应用程序:例如命令行参数配置值为
-Dspring.profiles.active={enviornment}
。 在 加 载 主 应 用 程 序 属 性 文 件 后 ,
Spring
将 在
(
application-{environment}.properties
)中加载后续的应用程序属性文件。
2.2.1 良好的基因
Spring Boot
是伴随着
Spring 4.0
诞生的,从字面理解,
Boot
是引导的意思,因此
Spring Boot
旨在帮助开发
者快速搭建
Spring
框架。
Spring Boot
继承了原有
Spring
框架的优秀基因,使
Spring
在使用中更加方便快捷。
2.2.2
简化编码
举个例子,如要创建一个
web
项目,使用
Spring
的人都知道,在使用
Spring
的时候,需要在
pom
文件中添
加多个依赖,而
Spring Boot
则会帮助开发着快速启动一个
web
容器,在
Spring Boot
中只需要在
pom
文件中
添加一个
starter-web
依赖即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
点击进入该依赖后可以看到,
Spring Boot
这个
starter-web
已经包含了多个依赖,包括之前在
Spring
工程中
需要导入的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<scope>compile</scope>
</dependency>
由此可以看出,
Spring Boot
大大简化了编码,不用一个个导入依赖,直接一个依赖即可。
2.2.3
简化配置
Spring
虽然使
Java EE
轻量级框架,但由于其繁琐的配置,一度被人认为是配置地狱。各种
XML
、
Annotation
配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。
Spring Boot
更多的是采用
Java Config
的方式,对
Spring
进行配置。
新建一个类但是不用
@Service
注解,也就是说,它是个普通的类,那么如何使它也成为一个
Bean
让
Spring
去管理呢?只需要
@Configuration
和
@Bean
两个注解即可
public class TestService {
public String sayHello () {
return "Hello Spring Boot!";
}
SpringBoot 教程
}
对应的配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JavaConfig {
@Bean
public TestService getTestService() {
return new TestService();
}
}
@Configuration
表示该类是个配置类,
@Bean
表示该方法返回一个
Bean
。这样就把
TestService
作为
Bean
让
Spring
去管理了,在其他地方如果需要使用该
Bean
,和原来一样,直接使用
@Resource
注解注入进来即可使
用,非常方便。
@Resource
private TestService testService;
另外部署配置方面,原来
Spring
有多个
xml
和
properties
配置,在
Spring Boot
中只需要个
application.yml
即可。
2.2.4
简化部署
在使用
Spring
时项目部署时需要在服务器上部署
tomcat
,然后把项目打成
war
包扔到
tomcat
里,在使用
Spring
Boot
后,不需要在服务器上去部署
tomcat
,因为
Spring Boot
内嵌了
tomcat
,只需要将项目打成
jar
包,然后
使用
java -jar xxx.jar
一键式启动项目。
另外,也降低对运行环境的基本要求,环境变量中有
JDK
即可。
2.2.5
简化监控
可以引入
spring-boot-start-actuator
依赖,直接使用
REST
方式来获取进程的运行期性能参数,从而达到监控
的目的,比较方便。但是
Spring Boot
只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围
监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要
Spring Cloud
来配合一起使用。
2.3
从未来发展的趋势来看
微服务是未来发展的趋势,项目会从传统架构慢慢转向微服务架构,因为微服务可以使不同的团队专注于更小
范围的工作职责、使用独立的技术、更安全更频繁地部署。而继承了
Spring
的优良特性,与
Spring
一脉相承,
而且支持各种
REST API
的实现方式。
Spring Boot
也是官方大力推荐的技术,可以看出,
Spring Boot
是未来
发展的一个大趋势。