本文主要介绍以下几部分:
1. 什么是Spring Boot?
2. 为什么使用Spring Boot?
3. Spring Boot提供哪些功能?
4. 如何使用Spring Boot?
5. Spring Boot有哪些不足?
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式(继承starter,约定优先于配置)来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot并不是一个框架,从根本上将,它就是一些库的集合,maven或者gradle项目导入相应依赖即可使用Spring Boot,而且无需自行管理这些库的版本。
目前最新的稳定版本是1.3.6.RELEASE,github地址:https://github.com/spring-projects/spring-boot
Spring Boot是为简化Spring项目配置而生,使用它使得jar依赖管理以及应用编译和部署更为简单。Spring Boot提供自动化配置,使用Spring Boot,你只需编写必要的代码和配置必须的属性。
使用Spring Boot,只需20行左右的代码即可生成一个基本的Spring Web应用,并且内置了tomcat,构建的fat Jar包通过java -jar就可以直接运行。
如下特性使得Spring Boot非常契合微服务的概念,可以结合Spring Boot与Spring Cloud和docker技术来构建微服务并部署到云端:
简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单。
Spring boot通过spring boot starter项目管理其提供的所有依赖的版本,当升级spring boot时,这些依赖的版本也会随之升级。个人无需指定版本号,但是也可以自定义版本号覆盖springboot的默认值。每个版本的boot都有对应的base spring version,不建议明确地指定spring版本。
例如,使用maven时,只需简单的在pom中包含spring-boot-starter-web即引入了Spring MVC和Tomcat的依赖。
下面是Spring Boot在 org.springframework.boot 组下提供的一些Starters:
名称 | 描述 |
---|---|
spring-boot-starter | 核心Spring Boot starter,包括自动配置支持,日志和YAML |
spring-boot-starter-actuator | 生产准备的特性,用于帮你监控和管理应用 |
spring-boot-starter-web | 对全栈web开发的支持,包括Tomcat和 spring-webmvc |
spring-boot-starter-aop | 对面向切面编程的支持,包括 spring-aop 和AspectJ |
spring-boot-starter-data-jpa | 对”Java持久化API”的支持,包括 spring-data-jpa , spring-orm 和Hibernate |
spring-boot-starter-jdbc | 对JDBC数据库的支持 |
spring-boot-starter-security | 对 spring-security 的支持 |
Spring Boot尝试根据你添加的jar依赖自动配置你的应用。例如,如果HSQLDB在类路径中,并且你没有手动配置任何db连接bean,则Spring Boot会自动配置一个内存db。
使用@EnableAutoConfiguration或者@SpringBootApplication注解,配合@Configuration注解类,即可达到自动配置的目的。
Spring Boot的这种自动配置是非侵入式的,你可以定义自己的配置或bean来替代自动配置的内容。
Spring Boot默认将应用打包成一个可执行的jar包文件,构建成功后使用java -jar命令即可运行应用。
Java并没有提供任何标准的方式来加载jar包中内嵌的jar包。一般开发者使用影子jar技术来解决这种问题。一个影子jar只是简单的将所有jar的类打包到一个单独的超级jar包中。由此带来的问题是它很难分辨在你的应用中实际可以使用哪些库,并且多个jar文件中的同名文件也是一个问题。
Spring Boot则另辟蹊径,使用如下文件格式让你能够直接嵌套jar包:
依赖需要放到放到内部的lib文件夹下。
Spring Boot可执行jar的原理是什么?
Spring Boot用于支持加载内嵌jars的核心类是 org.springframework.boot.loader.jar.JarFile(继承
自 java.util.jar.JarFile) 。它允许你从一个标准的jar文件
或内嵌的子jar数据中加载jar内容。当首次加载的时候,每个JarEntry的位置被映射到一个偏移于外部jar的物理文件:
![]()
上面的示例展示了如何在myapp.jar的0063处找到A.class。来自于内嵌jar的B.class实际可以在myapp.jar的3452处找到,C.class可以在3980处找到。
Spring Boot可以使用properties文件,YAML文件,环境变量,命令行参数等来外部化配置。属性值可以使用@Value注解直接注入到bean中,并通过Spring的Environment抽象或经过@ConfigurationProperties注解绑定到结构化对象来访问。
例子:
YAML配置文件内容:
使用@Value注解注入单个属性:
使用@ConfigurationProperties注入属性组:
Spring Boot的web模块内置嵌入的Tomcat, Jetty, Undertow来构建自包含的Servlet容器。web应用打包成可执行jar包时,相应的servlet 容器也会被嵌入到应用jar中。并且servlets, filters和listeners都可以通过声明为bean来被容器注册。servlet容器还可以通过外部化配置来相关定制属性,如server.port, server.session.persistence等。
Spring Boot通过stater pom来导入这些依赖,当发现相关jar在classpath中时,Spring Boot将启动相应的自动配置。例如,如果security的jar在classpath中,Spring Boot的web应用将自动启动安全限制,并且默认启动basic认证。
Spring Boot的devtools模块可以为应用增加开发时(development time)特性,例如开发环境属性默认值,自动重启,LiveReload(在自愿发生变化时触发浏览器刷新),全局设置等。
Actuator是个机器术语,目前没有统一的翻译,可以直译为促动器或执行器,Actuator通过微小的改变就可以产生很大的移动。
Spring Boot Actuator为你的应用提供一些生产环境必需的特性,如审计(audit),健康(health)和数据采集(metrics)等。使你可以在部署应用到生产环境后,通过HTTP(需要SpringMVC),JMX甚至remote shell(SSH, Telnet)等来管理和监视应用。例如,HTTP环境下,访问 contextUrl/health 路径即可查询当前环境的磁盘空间,应用和数据库的状态等;访问contextUrl/metrics路径即可查询当前jvm的内存使用情况,线程池的状态等。
默认情况下,Spring Boot 1.3.6.RELEASE 需要Java7和Spring框架4.2.7.RELEASE或以上。你可以在Java6下使用Spring Boot,不过需要添加额外配置。明确支持的构建工具是Maven(3.2+)和Gradle(1.12+)。
注:尽管你可以在Java6或Java7环境下使用Spring Boot,通常我们建议你如果可能的话就使用Java8。
下列内嵌容器在满足对应的Servlet和JDK版本要求时,支持开箱即用(out of the box):
名称 | Servlet版本 | Java版本 |
---|---|---|
Tomcat 8 | 3.1 | Java7+ |
Tomcat 7 | 3.0 | Java6+ |
Jetty 9 | 3.1 | Java7+ |
Jetty 8 | 3.0 | Java6+ |
Undertow 1.1 | 3.1 | Java7+ |
※ Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。
你也可以将Spring Boot应用部署到任何兼容Servlet 3.0+的容器。
此方法和3.1中的start.spring.io是一样的。
Spring Boot依赖的groupId为 org.springframework.boot 。通常你的Maven POM文件需要继承 spring-boot-starter-parent ,然后声明一个或多个“Starter POMs”依赖。
典型的spring boot项目的pom文件结构如下所述:
Scope=import可以使你无需继承spring-boot-starter-parent,而又保留spring-boot-starter-parent提供的依赖管理(插件管理除外):
※ 除了3.4以外,3.1到3.3最终形成的pom文件和项目结构是一样的。
如图所示,Spring Boot没有提供相应的服务发现和注册的配套功能(例如需要借助Spring Cloud和Netflix的Eureka),自身的Actuator所提供的监控功能,也需要与现有的监控对接。没有配套的安全管控方案,对于REST的落地,还需要自行结合实际进行URI的规范化工作。
可见Spring Boot作为一个微框架,离微服务的实现还是有些距离的。
http://www.infoq.com/cn/articles/microframeworks1-spring-boot?utm_source=infoq_en&utm_medium=link_on_en_item&utm_campaign=item_in_other_langs
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
http://www.csdn.net/article/a/2016-05-12/15838098
原文:http://blog.csdn.net/qiutongyeluo/article/details/51883084