本文参考自Spring Boot文档。
Spring Boot 简介
Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就是帮我们
自动配置 。Spring
Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring
Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序。
创建项目
创建项目
创建项目很简单。如果使用STS的话,新建Spring Starter项目即可。如果使用IDEA的话,新建Spring
Initializer项目。如果不想使用IDE的话,从start.spring.io创建项目也可以。例如下面就是一个Spring
Boot项目的build.gradle文件,是我用IDEA创建的项目。由于我是用了最新的快照版本,因此这里的仓库还多了两个Spring的快找仓库,可以直接无视。(因为1.5的稳定版中Thymeleaf的支持才到2,为了使用最新Thymeleaf3,只能使用最新的快照版。)
我们可以看到Spring Boot和一般的项目差不多,只不过多应用了Spring
Boot插件,它会让我们更方便的运行Spring。另外在项目中没有其他依赖的引用,只引用了Spring Boot
Starter依赖,这些依赖会将可能会使用到的依赖帮我们引用。例如spring-boot-starter-test会引用JUnit、AssertJ等一些测试框架,我们不用再引用了。这极大地方便了我们的开发。而且这些依赖不需要指定具体版本,具体的版本由Spring帮我们决定。关于详细的Starter项目和具体jar包的版本号,参考13.5.
Starters和F.
Dependency versions。
buildscript { ext { springBootVersion = '2.0.0.BUILD-SNAPSHOT' } repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' jar { baseName = 'spring-boot-sample' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.8 repositories { mavenCentral() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } }
dependencies { compile('org.springframework.boot:spring-boot-starter-aop') compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('org.springframework.boot:spring-boot-starter-thymeleaf') compile('org.springframework.boot:spring-boot-starter-web') runtime('org.springframework.boot:spring-boot-devtools') runtime('org.hsqldb:hsqldb') runtime('mysql:mysql-connector-java') compileOnly('org.projectlombok:lombok') testCompile('org.springframework.boot:spring-boot-starter-test') }
项目格式
项目格式类似下图,和一般的Maven或者Gradle项目类似,只不过多了点东西。资源文件夹下static文件夹用来存放web程序的静态资源,例如图片、css、js等。template文件夹存放web程序的视图模板,html等需要渲染的模板文件就放在这里。application.properties文件很重要,它是Spring
Boot项目的全局配置文件。以往我们需要编写层级XML配置文件,现在只需要在这里使用key=value方式即可指定这些属性。默认的模板还为我们添加了两个类。一个在main下,是Spring
Boot项目的运行类,另一个在test下,是测试类。
项目格式
运行类的代码如下。它是一个简单的类,包含了主方法,而且类上使用了@SpringBootApplication注解。这是一个惯用注解,它会帮我们启用自动配置等特性。
@SpringBootApplication public class SpringBootSampleApplication { public static void main(String[] args) { SpringApplication.run(SpringBootSampleApplication.class, args); } }
如果看一下SpringBootApplication的源代码,类似下面这样。可以看到,SpringBootApplication的功能是通过几个注解实现的。EnableAutoConfiguration注解启用了自动配置功能。ComponentScan注解会扫描该类所在的包和子包。所以
Spring推荐我们将这个运行类放到项目的根包下 ,以便我们不需要任何配置即可扫描到所有配置类。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication {
Spring
Boot项目更喜欢Java配置方式。因此从这里开始,所有的Spring配置都是用Java方式配置。当然如果你还想使用XML配置文件也可以,新建一个空的配置类,然后添加@ImportResource注解并传递要使用的XML文件路径即可。
运行项目
如果使用Maven的话,运行下面的命令。
mvn spring-boot:run
如果使用Gradle的话,使用下面的命令。
gradle bootRun
然后就会显示类似下面的输出,后面会跟一大堆日志信息。如果是命令行程序的话,日志信息之后就会显示程序的运行结果了。如果是Web程序的话,默认情况下会使用内嵌的Tomcat来运行。我们使用localhost:8080来访问即可。
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.0.BUILD-SNAPSHOT)
这个日志可以是彩色的。如果你的输出不是彩色的,可以在application.properties文件中添加下面一句。
spring.output.ansi.enabled=always
项目配置
自定义 SpringApplication
前面我们看到了SpringBoot项目的启动类是这样的。
@SpringBootApplication() public class SpringBootSampleApplication { public static void main(String[] args) { SpringApplication.run(SpringBootSampleApplication.class, args); } }
其实,我们可以自定义它的各种属性。这时候需要创建SpringApplication对象并设置它的各种属性。比方说下面不显示Banner。还有很多配置和用法请查阅官方文档。
@SpringBootApplication() public class SpringBootSampleApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(SpringBootSampleApplication.class); application.setBannerMode(Banner.Mode.OFF); application.run(args); } }
事件和监听器
如果有更高级的需求可以使用监听器来管理Spring
Boot程序的各个生命周期。监听器需要实现org.springframework.context.ApplicationListener接口。
public class MyAppListener implements ApplicationListener<ApplicationReadyEvent> {
@Override public void onApplicationEvent(ApplicationReadyEvent event) { System.out.println("应用程序准备就绪"); } }
在监听器中可以设置下面几种事件。
- ApplicationStartingEvent
- ApplicationEnvironmentPreparedEvent
- ApplicationPreparedEvent
- ApplicationReadyEvent
- ApplicationFailedEvent
之后,把监听器添加到Spring程序中。
@SpringBootApplication() public class SpringBootSampleApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(SpringBootSampleApplication.class); application.setBannerMode(Banner.Mode.OFF); application.addListeners(new MyAppListener()); application.run(args); } }

