一 配置类代替
举几个列子.
- Spring Boot的DataSourceAutoConfiguration中定义的JdbcTemplate Bean
@Bean
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}
- Spring Security定义的SpringBootWebSecurity-Configuration
@Configuration
@EnableConfigurationProperties
@ConditionalOnClass({ EnableWebSecurity.class })
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
@ConditionalOnWebApplication
public class SpringBootWebSecurityConfiguration {
...
}
细心的你会发现这两段代码上都有一个ConditionalOnMissingBean注解,没错,配置类代替就是用到了这个注解,当你往程序里面通过在SecurityConfig上添加@EnableWebSecurity注解,我们实际上间接创建了一个WebSecurityConfiguration bean。这样就会覆盖掉自动配置的bean.
二 通过属性文件外置配置
Spring Boot自动配置的Bean提供了300多个用于微调的属性。当你调整设置时,只
要在环境变量、Java系统属性、JNDI(Java Naming and Directory Interface)、命令行参数或者属
性文件里进行指定就好了。
$ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false
- 运行应用程序的命令行参数
spring.main.show-banner=false
- application.properties
spring:main: show-banner: false
- application.yml
$ export spring_main_show_banner=false
- 将属性设置为环境变量
实际上,Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括如下几处(很多没有用过,嘻嘻嘻嘻)。
(1) 命令行参数
(2) java:comp/env里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
(5) 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过@PropertySource标注的属性源
(9) 默认属性注:这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。
网友评论