SpringBoot中配置文件优先级和有哪些方式获取配置文件中的信息
一、SpringBoot中配置文件的优先级
1、file: ./config/ (./ 表示当前路径下 file表示是当前项目)
2、file: ./
3、classpath:config/
4、classpath:
从上到下,优先级依次递减!
各配置文件之间的特性:
①: 如果配置相同的东西 如:server.port ,高优先级的文件中的配置会覆盖低优先级的文件中的配置。
②: 各文件之间是互补配置的。
参考类: ConfigFileApplicationListener
二、有哪些方式获取配置文件中的信息?
1、获取application.properties(application.yml)中的配置信息
①:通过@ConfigurationProperties 注解来获取
接口定义:
@Target({
ElementType.TYPE, ElementType.METHOD }) // 可以作用在类和方法上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {
@AliasFor("prefix")
String value() default ""; // 表示前缀
@AliasFor("value")
String prefix() default ""; // 表示前缀
boolean ignoreInvalidFields() default false;
boolean ignoreUnknownFields() default true;
}
使用方式:
@ConfigurationProperties(prefix = "dog") // 指定前缀
@Component
public class Dog {
private String name; // 自动绑定
private int age;
// 需要 对应的 setter 方法
}
配置文件信息:
dog.name=dog
dog.age=11
②:通过@Value注解来获取(value可以通过${}获取环境变量中的属性,#{}SPEL)
接口定义:
@Target({
ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) // 可以作用在 字段、方法、参数、注解 上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
String value();
}
使用方式:
@Component
public class Dog {
@Value("${dog.name}")
private String name;
@Value("${dog.age}")
private int age;
}
配置文件信息:
dog.name=dog
dog.age=11
2、获取自定义配置文件(properties文件)中的配置信息
2.1、想要获取自定义配置文件(properties文件)中的配置信息,我们必须先加载该配置文件,通过@PropertySource注解加载
接口定义: