spring boot 试用笔记
起源
在2013年的SpringOne 2GX会议期间推出的,Spring Boot的项目负责人在twitter中发布的演示视频中,程序员用了不到十分钟时间,就搭建起了一个基于Spring的web程序,而且在本地运行,这个特性使它受到很大关注。
感受
我近期刚好搭建修改了一个基于spring应用的代码,刚开始这个应用使用了xml的配置,我逐步加入springmvc、logback、ibatis&&datasource、jetty-maven-plugin这些依赖,而且改为基于annotation的配置,整个骨架从无到有、调通运行成功起来大概用了1天的时间。之后迁移到纯java config的方式(移除web.xml、spring config xml)用了1个小时。再然后看到spring-boot&&spring-loaded,修改代码,调试通过大概用了30分钟。
最让我感觉惊艳的地方在于,基于spring-boot搭建应用就像使用play-framework、ror搭建应用一样简单,按需启用特性,初始阶段不需要太多的配置:一个pom.xml就足以,而且开发人员基本上不用考虑不同jar之间的版本依赖,例如logback && slf4j、spring && aspectj。这样能够很快从无到有搭建一个web应用。
spring-boot 自带tomcat/jetty 容器,在开发调试的时候根本不需要mvn compile package这些流程,配合maven插件直接在web执行 mvn spring-boot:run就可以了。
spring-boot的应用发布为war文件,在第三方容器执行。也可以使用java应用方式来standlone启动。通吃神马paas、云环境
spring-boot 和 springframework 关系如下:
user—-> spring-boot —-> springframework
使用
JDK6 建议使用:spring-boot 1.1.12.release版本(避免版本过高部分依赖的jar是基于jdk7生成的)&& maven 3+
JDK7 那就用最新版本的
建议参考文章:
- 官方文档:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
- 插件官方文档:http://docs.spring.io/spring-boot/docs/current/maven-plugin/
- IBM的示例文档:http://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/
需要注意
- 1 官方推荐我们使用spring-boot-starter-parent作为POM依赖的parent,spring-boot-starter-parent包含了以下信息:
- 默认编译级别为Java 1.6
- 源码编码为UTF-8
- 一个依赖管理节点,允许你省略普通依赖的 标签,继承自 spring-boot-dependencies POM。
- 合适的资源过滤
- 合适的插件配置(exec插件,surefire,Git commit ID,shade)
- 针对properties 和 application.yml 的资源过滤
- 2 加入spring-loaded maven插件,启用debug,如果说spring-boot开启搭建应用的快感,那么spring-loaded就是让java coder体验php这些脚本语言coding的快感 (≖ ‿ ≖)✧
代码配置很简单:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"-->
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
</jvmArguments>
</configuration>
<dependencies>
<!-- spring hot reload-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
</plugin>
- 3 打包war工程,spring boot应用默认是打包jar,如果改为war应用,需要修改package类型:
<packaging>war</packaging>
,并且实现SpringBootServletInitializer类,
@Configuration
@EnableAutoConfiguration
@ComponentScan("com.xxoo")
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
稍等,为嘛没有用@SpringBootApplication。。。因为这个类是在1.2.x版本中才出现的
详情参考: 《74.1 创建一个可部署的war文件》 这个章节
- 4 还有一些生产环境的监控支持,详情参考:第5章,《Spring Boot执行器:Production-ready特性》