远憬建站,不同网站建设特点,网络广告营销推广,小网站推荐一个官方文档 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config Spring Boot允许外部化配置#xff0c;这样就可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源#xff0c;包括Java属性文件、YAML文件、环境… 官方文档 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config Spring Boot允许外部化配置这样就可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源包括Java属性文件、YAML文件、环境变量和命令行参数。
属性值可以使用Value注解直接注入到bean中通过Spring的环境抽象访问也可以通过ConfigurationProperties绑定到结构化对象。
外部配置优先级
Spring Boot使用了一个非常特殊的PropertySource顺序旨在允许合理的值覆盖。后面的属性源可以覆盖前面定义的值。来源按以下顺序考虑(优先级从小到大):
Default properties (specified by setting SpringApplication.setDefaultProperties).PropertySource annotations on your Configuration classes. 请注意在刷新应用程序上下文之前此类属性源不会添加到环境中。这对于logging.* 和spring.main.*在刷新开始之前就要set的配置来说太晚了 Config data (such as application.properties files).A RandomValuePropertySource that has properties only in random.*.OS environment variables.Java System properties (System.getProperties()). ; VM options,使用java -Dage18 …JNDI attributes from java:comp/env.ServletContext init parameters.ServletConfig init parameters.Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).Command line arguments.properties attribute on your tests. Available on SpringBootTest and the test annotations for testing a particular slice of your application.DynamicPropertySource annotations in your tests.TestPropertySource annotations on your tests.Devtools global settings properties in the $HOME/.config/spring-boot directory when devtools is active.
例 最终转换的执行命令: java -Dage22 -classpath **.jar cn.jhs.spring.boot.App --namejoe 执行结果namejoe,age22,sexM
Application Properties优先级 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files springboot默认会加载application.yaml或application.properties中的配置信息. !!!注意: 同名文件,.properties优先级大于.yaml
1.application.properties and YAML
1.1 优先级 案例说明 1.2 spring.config.name
如果你不喜欢用application作为配置文件名可以通过指定spring.config.name环境属性来切换到另一个文件名。
# myproject.properties/yaml
java -jar myproject.jar --spring.config.namemyproject1.3spring.config.location
还可以使用spring.config.location环境属性来引用显式位置。此属性接受一个逗号分隔的列表其中包含要检查的一个或多个位置。
# 若default.properties与override.properties存在同名的配置后面的会覆盖前面的; **last-wins**策略
$ java -jar myproject.jar --spring.config.location\optional:classpath:/default.properties,\optional:classpath:/override.properties1.4 spring.config.additional-location
#1. 设置 spring.config.additional-location
spring.config.additional-locationoptional:classpath:/custom-config/,optional:file:./custom-config/#2.优先级(优先级从小到大后面覆盖前面)
## additional-location高于spring.config.location优先级
optional:classpath:/;optional:classpath:/config/
optional:file:./;optional:file:./config/;optional:file:./config/*/
optional:classpath:custom-config/
optional:file:./custom-config/2.application-{profile}.properties and YAML https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files.profile-specific Spring Boot还会尝试使用命名约定application-{profile}来加载特定于profile的文件。例如如果您的应用程序激活一个名为prod的配置文件那么application.yaml 和 application-prod.yaml 都会被使用。
特定于profile的文件总是覆盖非特定的配置。 如果指定了多个profile则采用last-wins策略。例如如果spring.profiles.active设置为prod,live由属性指定值在application-prod.properties属性可以被application-live.properties中的属性覆盖。
2.1 last-win 综合案例
#1. profiles : prod,live#2. 存在配置文件
/cfgapplication-live.properties
/extapplication-live.propertiesapplication-prod.properties# 3.1 若 spring.config.locationclasspath:/cfg/,classpath:/ext/ 优先级(后面的覆盖前面)
# /cfg 总是会被 /ext 覆盖
/cfg/application-live.properties
/ext/application-prod.properties
/ext/application-live.properties# 3.2 若 spring.config.locationclasspath:/cfg/;classpath:/ext/ (注意是; 不是,)
# # /cfg 和/ext 优先级一致
/ext/application-prod.properties
/cfg/application-live.properties
/ext/application-live.properties3. jar包外的 application.properties and YAML
4 jar包外的application-{profile}.properties and YAML 其它
yaml分隔符
yaml可以使用---分割不同的配置块,当spring.profiles.activedev时配置文件优先级 此时的environment.getPropertySources().propertySourceList
PropertySource(value{xx,yy}) 多个配置
Component
ConfigurationProperties(prefix my.cache)
//注意默认仅支持 *.properties
PropertySource(value {classpath:cache.properties,file:./config/cache.properties}, ignoreResourceNotFound true)
public class CacheConfigProperties {private String name;private long timeout;
}这里PropertySource引入的资源跟code顺序无关 同样按照 file classpath的优先级来加载。 所以我们可以在project中填写默认的配置。 部署服务器时,在file目录下填写实际的配置。 宽松的绑定规则 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.typesafe-configuration-properties.relaxed-binding Spring Boot使用了一些宽松的规则将环境属性绑定到ConfigurationProperties bean上因此环境属性名和bean属性名不需要完全匹配。
ConfigurationProperties class:
import org.springframework.boot.context.properties.ConfigurationProperties;ConfigurationProperties(prefix my.main-project.person)
public class MyPersonProperties {private String firstName;public String getFirstName() {return this.firstName;}public void setFirstName(String firstName) {this.firstName firstName;}}
在上述代码中可以使用下列属性名。