Spring Boot

Spring Boot

2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE(Java Enterprise Edition)开发中真正意义上的标准,但是随着技术的发展,Java EE使用Spring逐渐变得笨重起来,大量的XML文件存在于项目之中。繁琐的配置,整合第三方框架的配置问题,导致了开发和部署效率的降低。201210月,Mike YoungstromSpring jira中创建了一个功能请求,要求在Spring框架中支持无容器Web应用程序体系结构。他谈到了在主容器引导spring容器内配置Web容器服务。这是jira请求的摘录:

我认为SpringWeb应用体系结构可以大大简化,如果它提供了从上到下利用Spring组件和配置模型的工具和参考体系结构。在简单的main()方法引导的Spring容器内嵌入和统一这些常用Web容器服务的配置。

这一要求促使了2013年初开始的Spring Boot项目的研发,到今天,Spring Boot的版本已经到了2.0.3 RELEASESpring Boot并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。它集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box,大部分的Spring Boot应用都只需要非常少量的配置代码(基于Java的配置,开发者能够更加专注于业务逻辑。

Spring Boot定位

Spring的官方网站,可以看到下图:

Spring: the source for modern java

我们可以看到图中官方对Spring Boot的定位:Build Anything, Build任何东西。Spring Boot旨在尽可能快地启动和运行,并且只需最少的Spring前期配置。同时我们也来看一下官方对后面两个的定位:

  • SpringCloud:Coordinate Anything,协调任何事情;
  • SpringCloud Data Flow:Connect everything,连接任何东西。

Spring BootSSM

SSMSpring IoC、Spring MVC、Mybatis的组合。SSM限定死了你只能开发Java Web应用,而且MVC框架必须用Spring MVC,持久层必须用MybatisSpring Boot没有和任何MVC框架绑定,没有和任何持久层框架绑定,没有和任何其他业务领域的框架绑定。开发Web应用可以用Spring Boot。用spring-boot-starter-web就帮你配置好了Spring MVC。你不想用Spring MVC了,换成Spring WebFLux(spring-boot-starter-webflux)写响应式Web应用。数据持久层,你可以用Spring Data项目下的任何子项目(JPA\JDBC\MongoDB\Redis\LDAP\Cassandra\Couchbase\Noe4J\Hadoop\Elasticsearch….),当然用非Spring官方支持的Mybatis也可以。只要用上对应技术或框架的spring-boot-starter-xxx就可以了。

但是必须要知道,Spring Boot提供的只是这些starters,这些Starter依赖了(maven dependence)对应的框架或技术,但不包含对应的技术或框架本身!

Spring Boot优点

良好的基因

Spring Boot是伴随着Spring 4.0诞生的,从字面理解,Boot是引导的意思,因此Spring Boot旨在帮助开发者快速搭建Spring框架。Spring Boot继承了原有Spring框架的优秀基因,使Spring在使用中更加方便快捷。

简化编码

举个例子,比如我们要创建一个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>
    <version>5.0.7.RELEASE</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.7.RELEASE</version>
    <scope>compile</scope>
</dependency>

简化配置

Spring虽然号称Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XMLAnnotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用Java Config的方式,对Spring进行配置。举个例子,我新建一个类,但是我不用@Service注解,也就是说,它是个普通的类,那么我们如何使它也成为一个BeanSpring去管理呢?只需要@Configuration@Bean两个注解即可,如下:

public class TestService {
    public String sayHello () {
        return "Hello Spring Boot!";
    }
}

@Configuration
public class JavaConfig {
    @Bean
    public TestService getTestService() {
        return new TestService();
    }
}

@Configuration表示该类是个配置类,@Bean表示该方法返回一个Bean。这样就把TestService作为BeanSpring去管理了,在其他地方,我们如果需要使用该Bean,和原来一样,直接使用@Resource注解注入进来即可使用,非常方便。

@Resource
private TestService testService;

另外,部署配置方面,原来Spring有多个xmlproperties配置,在Spring Boot中只需要个application.yml即可。

简化部署

在使用Spring时,项目部署时需要我们在服务器上部署tomcat,然后把项目打成war包扔到tomcat里,在使用Spring Boot后,我们不需要在服务器上去部署tomcat,因为Spring Boot内嵌了tomcat,我们只需要将项目打成jar包,使用java -jar xxx.jar一键式启动项目。

另外,也降低对运行环境的基本要求,环境变量中有JDK即可。

简化监控

我们可以引入spring-boot-start-actuator依赖,直接使用REST方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是Spring Boot只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要Spring Cloud来配合一起使用。

下一页