@EnableAutoConfiguration 自动配置一些文件,jar之类来帮助启动springboot
13.2.1 继承starter parent
在maven文件中配置spring-boot-starter-parent,后续导入的其他starters,就可以省略版本号
13.2.2 在不使用parent POM的情况下玩转spring boot
如果不想使用继承spring-boot-starter-parent,通过设置scope=import的依赖,可达到继承相同的效果
13.2.3 改变Java版本
spring-boot-starter-parent 中Java版本比较陈旧,可添加java.version属性来自定义Java版本
13.2.4 spring-boot-maven-plugin插件可以将项目打成一个可执行jar
14.2 放置应用的main类
通常建议将main类放置在应用包的顶层,这样隐式定义了一个基础包搜索路径,@ComponentScan 注解而不需要指
定 basePackage 属性


16 自动配置
尝试根据添加的jar依赖自动配置spring应用。@EnableAutoConfiguration注解或者@SpringBootApplication到主配置类上
16.2 禁用特定的自动配置项
@EnableAutoConfiguration 注解的exclude属性禁用
18 使用@springBootApplication注解
@springBootApplication等价以默认属性使用@Configuration , @EnableAutoConfiguration 和 @ComponentScan
19.2
springboot支持以远程调试模式运行应用
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/myproject-0.0.1-SNAPSHOT.jar
19.3使用maven插件运行
可以使用命令mvn spring-boot:run来快速编译、运行应用,此命令还支持热加载
20 开发工具
spring-boot 提供了用于提升开发体验的工具集,可以集成到任何模块中,以提供development-time特性,只需要简单添加依赖:spring-boot-devtools
为了防止devtools传递到项目中的其他模块,设置该依赖级别为optional是个不错的实践
20.2 自动重启
srping-boot-devtools 只要classpath下的文件有变动,就会自动重启
20.2.1 排除资源
某些资源变化没必要重启,可以使用spring.devtools.restart.exclude 属性排除这些资源
例如,为了只排除 /static 和 /public ,你可以这样设置:
spring.devtools.restart.exclude=static/**,public/**
如果想保留默认属性,并添加其他排除规则:spring.devtools.restart.additional-exclude
20.2.2 查看其他路径
如果想让在classpath之外的文件改变时也会重启或者热加载,可以使用spring.devtools.restart.additional-paths
可以使用spring.devtools.restart.exclude属性来控制额外路径下资源变化触发重启或者是重新加载
20.2.3 禁用重启
可以在application.properties文件中配置spring.devtools.restart.enabled来禁用重启
彻底禁用自动重启:需要在SpringApplication.run(...)之前设置系统属性:spring.devtools.restart.enabled
例如:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
20.2.4 使用触发器文件
作用:在特定的时间触发重启
触发器文件是一个特殊的文件,只有修改它,才能实际触发一个重启检测,实际的重启只有在Devtools发现必须重启的时候,才重启
触发器文件可以手动更新,也可以使用编辑器插件自动更新
指定触发器文件:spring.devtools.restart.trigger-file
20.2.5 自定义restart类加载器
重启功能是通过两个类加载器实现的
默认情况下,IDE中打开的项目是通过restart类加载器加载,其他常规jar文件使用过basic类加载器加载
META-INF/spring-devtools.properties文件,该文件可以包含
restart.exclude、restart.include为前缀的属性
include定义了需要在加载进restart类加载器中的实体
exclude定义了需要加载进basic类加载器中的实体
这些属性的值是一个将应用到classpath的正则表达式,所有的key必须唯一
20.3 liveReload
spring-boot-devtools 内嵌了LiveReload服务器,可以在资源改变时刷新浏览器
可以使用spring.devtools.livereload.enabled 属性设置为false来禁用
每次只能运行一个LiveReload服务器,如果ide中启动多个应用,只有第一个能运行LiveReload服务
20.4 全局设置
在$Home文件夹下添加.spring-boot-devtools.properties可以配置全局devtools设置,添加进该文件的任何属性该机器上部署的springboot
应用的devtools模块
20.5 远程应用
spring.devtools.remote.secret 属性可以启用远程,自动开启服务端远程,客户端必须手动开启。有风险,只可开发使用,
20.5.1 运行远程客户端应用
远程客户端应用程序(remote client application)需要在IDE中运行,你需要使用
跟将要连接的远程应用相同的classpath运
行 org.springframework.boot.devtools.RemoteSpringApplication ,传参
为你要连接的远程应用URL
20.5.2 远程更新
远程客户端监听应用的classpath变化,任何更新会自动发布到远程,并重启
20.5.3 远程调试通道
devtools基于http的远程调试通道。
spring.devtools.remote.debug.local-port 属性设置不同的端口
远程应用开启远程调试功能,通过配置JAVA_OPTS实现
基于internet的远程调试服务可能很慢,需要增加超时时间
springboot特性
23.1 启动失败
如果应用启动失败,注册的FailureAnalyzers会提供一个特定的错误信息,以及解决该问题的动作
若果没有可用FailureAnalyzers,就需要查看auto-configuration报告,因此需要启动
org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer 的debug属性或开启debug日志级别
23.2 自定义Banner
通过在classpath下添加一个banner.txt或设置banner.location指定相应的文件,可以改变启动过程中打印的banner
编程方式产生一个banner:
SpringBootApplication.setBanner(…) 方法,并实现 org.springframework.boot.Banner 接口的 printBanner() 方法
可以使用spring.main.banner-mode 属性决定将banner打印到何处:
System.out(console)、logger(log)、不输出(off)
23.3 自定义SpringApplication
如果不喜欢默认的SringApplication,可以创建本地实例,并对它自定义如:
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MySpringConfig
uration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
传递给SringApplication构造器参数一般作为spring beans的配置源。多数情况下,是@Configuration类、XML配置或者要扫描包的引用
也可以使用application.properties文件配置springApplication
23.4 流程构建API
构建分层的application(具有多个父子关系的上下文) 可以使用SpringApplicationBuilder ,允许链式调用多个方法,包括parent和child方法,这样就可以创建多层次结构
创建ApplicationContext层次时有些限制,比如,Web组件必须包含在子上下文中,并且父上下文和子上下文使用相同的Environment

23.5 Application事件和监听器
在ApplicationContext中创建前触发的事件,不能在事件处理类中通过@Bean注册监听器
只能通过SpringApplication.addListeners(…) 或 SpringApplicationBuilder.listeners(…) 方法注册
监听器自动注册,不关心注册方式:
在工程中添加META-INF/spring.factories文件,并使org.springframework.context.ApplicationListener 作为key指向那些监听器
应用运行时,事件发送次序:
1、在开始运行时,发送事件ApplicationStartedEvent
2、在Environmen将被应用于上下文,但在上下文创建前,发送ApplicationEnvironmentPreparedEvent
3、在refresh前,在bean加载之后,发送ApplicationPreparedEvent
4、在refresh之后,相关回调处理完之后,发送ApplicationReadyEvent,表示应用已经准备好接受请求
5、启动过程出现异常,发送ApplicationFailedEvent
23.6 Web环境
23.7 访问应用参数
获取传递给SpringApplication.run(…)的应用参数,需注入org.springframework.boot.ApplicationArguments类型的bean
ApplicationArguments接口提供对原始的String[]参数的访问,也提供option和non-option参数的访问

spring Boot会注册一个包含spring Environment属性的CommandLinePropertySource,这允许开发者使用注解@Value注解注入单个应用参数
23.8 使用ApplicationRunner或CommandLineRunner
在springApplication启动后执行特殊代码,可以实现ApplicationRunner 或 CommandLineRunner 接口,这两个接口都提供单一的run方法,该方法仅在SpringApplication.run(...)之前调用
如果定义的CommandLineRunner 或 ApplicationRunner beans需要以特定的顺序调用,需要实现org.springframework.core.Ordered 接口或使
用 org.springframework.core.annotation.Order注解
23.9 Application退出
应用结束时返回特定退出码,需要实现org.springframework.boot.ExitCodeGenerator 接口
24 外部化配置