@Value获取值和@ConfigurationProperties获取值比较
|
@ConfigurationProperties
|
@Value
|
功能
|
批量注入配置文件中的属性
|
一个个指定
|
松散绑定(松散语法)
|
支持
|
不支持
|
SpEL
|
不支持
|
支持
|
JSR303数据校验
|
支持
|
不支持
|
复杂类型封装
|
支持
|
不支持
|
@Value
@Value("${kafkaConfig.topic}")
@ConfigurationProperties
@Component
@ConfigurationProperties(prefix="configInfo")
public class InfoYml {
private static String fileServiceUp;
public static String getConfInfo(String str){
if(str.equals("fileServiceUp")){
return getFileServiceUp();
}
}
get()、set() 方法
}
application.yml 文件
#### 项目的相关配置信息
configInfo:
##文件服务器dev
fileServiceUp: http://10.125.128.85:9000/cs/gcc/file/upload
指定配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix="configInfo")
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
激活指定profile
配置文件有多种 test 、prod、dev (例:
application-dev.yml
)
方法一 在配置文件中 spring.profiles.active=dev (优先级最低)
方法二 启动jar时, java -jar 【文件名.jar】 --spring.profiles.active=dev
其他方法 在配置tomcat 或者 JVM时 加参数
--spring.profiles.active=dev (优先级最高)
配置文件可放置位置
–file:./config/
优先级高 应该是
src\config
–file:./
–classpath:/config/ 即jar中的WEB-INF/classes/config 代码中的 src\main\resources
–classpath:/ 优先级低
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
在后期运维时,可以通过 spring.config.location 参数指定外部配置文件(优先级高)
java -jar 【
jar包
】 --spring.config.location=【配置文件路径】
两种配置文件 优先级
application.properties 和 application.yml 如果两个文件的配置项、路径一致,那么从最后的结果来说,yml内容会被覆盖。看博文是说yml先加载(具体原因未纠结)。