Spring Boot 自定义属性配置

Spring Boot自定义配置

  • 1. 覆盖Spring Boot自动配置
  • 2. 通过属性文件外置配置
    • 2.1 自动配置微调(自动配置属性)
    • 2.1 应用程序Bean的配置外置(Bean配置属性)
    • 2.3 使用Profile进行配置(针对不同环境配置不同属性值)

1. 覆盖Spring Boot自动配置

想要覆盖Spring Boot的自动配置,你所要做的仅仅是编写一个显式的配置。SpringBoot会发现你的配置,随后降低自动配置的优先级,以你的配置为准。

Spring Boot的设计是加载应用级配置,随后再考虑自动配置类。

2. 通过属性文件外置配置

Spring Boot自动配置的Bean提供了300多个用于微调的属性。当你调整设置时,只要在环境变量、Java系统属性、JNDI(Java Naming and Directory Interface)、命令行参数或者属性文件里进行指定就好了。

环境变量名称必须用下划线而不是点和横杠

实际上,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) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。

application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的 /config 子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在 config 包内。
(4) 内置,在 Classpath 根目录
同样,这个列表按照优先级排序。也就是说,/config子目录里的application.properties会覆盖应用程序Classpath里的application.properties中的相同属性。
此外,如果你在同一优先级位置同时有application.properties和application.yml,那么application.yml里的属性会覆盖application.properties里的属性。

2.1 自动配置微调(自动配置属性)

2.1 应用程序Bean的配置外置(Bean配置属性)

开启配置属性
从技术上来说,@ConfigurationProperties注解不会生效,除非先向Spring配置类添加@EnableConfigurationProperties注解。但通常无需这么做,因为SpringBoot自动配置后面的全部配置类都已经加上了@EnableConfigurationProperties注解。

Spring Boot的属性解析器非常智能,它会自动把驼峰规则的属性和使用连字符或下划线的同名属性关联起来。换句话说,amazon.associateId这个属性和amazon.associate_id以及amazon.associate-id都是等价的。

2.3 使用Profile进行配置(针对不同环境配置不同属性值)

Spring Boot支持为application.properties和application.yml里的属性配置Profile。

如果你正在使用application.properties,可以创建额外的属性文件,遵循application-{profile}.properties这种命名格式,这样就能提供特定于Profile的属性了。

如果使用YAML来配置属性,则可以遵循与配置文件相同的命名规范,即创建application{profile}.yml这样的YAML文件,并将与Profile无关的属性继续放在application.yml里。
但既然用了YAML,你就可以把所有Profile的配置属性都放在一个application.yml文件里

Spring Boot Reference Guide

你可能感兴趣的:(Spring,Boot,Spring,Boot自动配置,属性文件,application.yml,Spring,Boot,Profile)