Spring Boot的理解
以前开发基于SpringMVC的web程序,需要运行在专门的容器里(例如Tomcat),然后从web.xml开始,添加Spring相关的配置。这些配置很多都是固定,或者约定俗成的,但是配置也是比较繁琐。所以Spring Boot就是为了简化这些配置,程序启动时,就创建了一些默认的配置。开发人员只需很少配置,可以直接使用,运行时直接可以用java -jar 方式来运行Spring Boot程序
主要特性
- Spring Boot Starter:它将常用的依赖分组进行整合,将其合并到一个依赖中,这样就可以一次性添加到项目
- 自动配置:Spring Boot 利用了Spring4.x对条件化配置的支持,合理地调测应用所需的bean病自动化配置他们
- 命令行借口:(Command-line interface,CLI),Spring Boot的CLI发挥了
Groovy
编程语言的有点,结合自动配置进一步简化Spring应用的开发 - Actuator:它为Spring Boot应用添加了一定的监控管理特性。
Spring Boot快速入门
Maven构建
pom.xml文件示例
|
|
继承starter parent方式
在parent里,指定号Spring Boot的版本
采用这种方式的好处在于,如果要添加相关starter的依赖,可以省略掉版本号,因为在parent里已经设置好版本(详情可以了解parent的pom信息)。应用这种方式时,一般没有parent
不使用parent POM
|
|
如果项目是有个模块,即一个parent的pom下有多个module,可以在parent的pom里定义这个依赖。然后在子module里,继承这个parent。
maven plugin
|
|
这个plugin用来把Spring Boot应用,包括它依赖的其他jar,最终打包成一个可执行的jar包。
Java代码
|
|
@RestController注解
在SpringMVC中,如果是控制器类,在类名上加@Controller
注解。如果这个类的某个返回的String是JSON格式的,在方法上加@ResponseBody
。如果所有方法都是返回JSON,也就是REST风格的,那直接在类上加@RestController
注解
@EnableAutoConfiguration注解
Spring Boot应用程序的入口类,main方法中通过SpringApplication.run启动。
用Spring Initializer创建
用浏览器输入http://start.spring.io/,打开时Spring Boot项目生成页面。
输入相应的Group、Artifact以及依赖,比如创建Web项目,搜索选择Web,如下图
输入完毕后,点击Generat Project
按钮,会弹出下载,把它下载下来,然后导入到IDE即可。
用IntelliJ IDEA创建
IntelliJ IDEA有创建SpringBoot项目的功能,不过需要的是收费的终极版,普通版没有。
Spring Boot über jar
Spring Boot 旨在帮助开发人员创建能直接运行的应用程序。为实现该目的,它将应用程序及其依赖项包装在一个可执行 JAR 中。要运行您的应用程序,可以像这样启动 Java:$ java -jar executableJar.jar
如果用解压缩工具打开这个jar包,会发现这个jar包里,除了一些.class文件,还嵌套了其他依赖的jar包。因为 Java 没有提供加载嵌套式 JAR 的标准方式,所以开发人员多年来一直使用 Apache Maven Shade 插件 等工具来构建 “shaded” JAR。shaded JAR 仅包含来自应用程序的所有依赖 JAR 的 .class 文件。但随着应用程序复杂性的增加和依赖项的增多,shaded JAR 可能遇到两个问题:
- 名称冲突,不同 JAR 中的两个类采用了相同名称。
- 依赖项版本问题,两个 JAR 使用同一个依赖项的不同版本。
Spring Boot 解决这些问题的方法是定义一种 特殊的 JAR 文件布局,其中的 JAR 本身嵌套在 über JAR 中。Spring 支持工具(例如 spring-boot-maven 插件)随后会构建这个可执行的 über JAR,使其符合该布局(不只是像shaded JAR 一样解包和重新打包 .class 文件)。运行这个可执行 JAR 时,Spring Boot 使用了一个特殊的类加载器来处理嵌套式 JAR 中的类。
参考资料
- 《Spring Boot实战》
- 《Spring Boot Reference》