2.1 Using the “default” Package
最好避免用default 包
2.2 main函数主类加@SpringBootApplication,如果不用的话,可以用@EnableAutoConfiguration和@ComponentScan代替
2.3 配置类 @Configuration
最好用配置类,不要用xml
3.1 增加配置类
不需要把配置类都写在一个类中,可以用@Import导入其他配置类,
或者用ComponentScan 自动装配spring组件,包括@Configuration配置类
3.2 导入XML配置
@ImportResource 可以导入xml配置文件
4.2 禁用自动装配
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
或者在属性文件中配置spring.autoconfigure.exclude
5 Spring Beans and Dependency Injection
@ComponentScan (查找bean)和@Autowired(构造器注入)使用效果很好,如果项目结构和推荐的一样,主类放在根目录下,那么@ComponentScan 不用添加参数。
各种应用组件(@Component, @Service, @Repository, @Controller等等)都会自动注册为spring beans
7.3 maven插件
$ mvn spring-boot:run 运行
8.2.4 禁用重启
devtools不想重启可以设置spring.devtools.restart.enabled 属性
或者在run之前设置
System.setProperty(“spring.devtools.restart.enabled”, “false”);
Spring Boot Features
1 SpringApplication
默认启动的时候,日志是info级别,启动日志可以通过设置spring.main.log-startup-info为false来关闭
1.1 Startup Failure
启动错误的时候,已注册的FailureAnalyzers 打印错误信息
1.2 懒加载
bean只有被使用的时候才创建,spring.main.lazy-initialization=true
1.3 自定义banner
将banner.txt加到类路径,或者设置spring.banner.location属性。
也可以设置jpg,gif等类型,并且设置spring.banner.image.location属性。
1.4 自定义 SpringApplication
比如关闭banner
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MySpringConfiguration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
1.5 链式编程启动
new SpringApplicationBuilder()
.sources(Parent.class)
.child(Application.class)
.bannerMode(Banner.Mode.OFF)
.run(args);
1.6.3 管理应用程序可用性状态
例如,我们可以将应用程序的“就绪”状态导出到一个文件中,以便Kubernetes的“ exec Probe”可以查看此文件:
@Component
public class ReadinessStateExporter {
@EventListener
public void onStateChange(AvailabilityChangeEvent<ReadinessState> event) {
switch (event.getState()) {
case ACCEPTING_TRAFFIC:
// create file /tmp/healthy
break;
case REFUSING_TRAFFIC:
// remove file /tmp/healthy
break;
}
}
}
当应用程序崩溃且无法恢复时,我们还可以更新应用程序的状态:
@Component
public class LocalCacheVerifier {
private final ApplicationEventPublisher eventPublisher;
public LocalCacheVerifier(ApplicationEventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
public void checkLocalCache() {
try {
//...
}
catch (CacheCompletelyBrokenException ex) {
AvailabilityChangeEvent.publish