美文网首页
Spring Boot自动配置与外置配置

Spring Boot自动配置与外置配置

作者: 何何与呵呵呵 | 来源:发表于2018-12-25 08:21 被阅读0次
一 配置类代替

举几个列子.

  • 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) 默认属性

注:这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。

相关文章

网友评论

      本文标题:Spring Boot自动配置与外置配置

      本文链接:https://www.haomeiwen.com/subject/wahakqtx.html