java中的接口是类吗
547
2022-08-27
Java如何使用ConfigurationProperties获取yml中的配置
目录使用ConfigurationProperties获取yml的配置使用方法@ConfigurationProperties获取不到配置文件属性值问题原因就是
使用ConfigurationProperties获取yml的配置
我们在开发过程中,会经常遇到需要自定义配置的场景,比如配置一个ip,一个地址等,并将其写入到yml文件中,在项目中使用@Value("${xxxx.xxxx}")来获取自定义的配置,其实是这样是有些笨重的,每定义一个配置,都需要写一个@Value来获取,那为啥不使用一个java config来统一获取配置呢?
使用方法
编写yml配置文件
user:
config:
# user_name user-name userName这三种配置方式都可以被识别到
user_name: "zhangsan"
age: "20"
exmail: "123@123.com"
address: "火星"
编写Java config类
// 需要重写get与set方法,此处使用lombok注解来代替
@Data
// 实例化到spring容器中
@Component
// 获取前缀为user.config的配置信息,与该类下的属性对比,进行绑定
@ConfigurationProperties(prefix = "user.config")
public class UserConfig {
private String userName;
private String age;
private String exmail;
private String address;
}
在需要使用的地方注入
@Resource
private UserConfig userConfig;
测试
@ConfigurationProperties获取不到配置文件属性值问题
application.yml
配置类
@Component
@ConfigurationProperties(prefix = "system")
public class SystemConfig {
/**
* 项目名称
*/
private static String name;
/**
* 版本
*/
private String version;
/**
* 版权年份
*/
private String copyrightYear;
/**
* 实例演示开关
*/
private boolean demoEnabled;
/**
* windows环境下,文件上传路径(本地上传)
*/
private static String winUploadPath;
/**
* 其他系统环境(linux、Mac...)环境下,文件上传路径(本地上传)
*/
private static String otherUploadPath;
/**
* 获取地址开关
*/
private static boolean addressEnabled;
public static String getName() {
return name;
}
public void setName(String name) {
SystemConfig.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getCopyrightYear() {
return copyrightYear;
}
public void setCopyrightYear(String copyrightYear) {
this.copyrightYear = copyrightYear;
}
public boolean isDemoEnabled() {
return demoEnabled;
}
public void setDemoEnabled(boolean demoEnabled) {
this.demoEnabled = demoEnabled;
}
public static String getWinUploadPath() {
return winUploadPath;
}
public static void setWinUploadPath(String winUploadPath) {
SystemConfig.winUploadPath = winUploadPath;
}
public static String getOtherUploadPath() {
return otherUploadPath;
}
public static void setOtherUploadPath(String otherUploadPath) {
SystemConfig.otherUploadPath = otherUploadPath;
}
public static boolean isAddressEnabled() {
return addressEnabled;
}
public void setAddressEnabled(boolean addressEnabled) {
SystemConfig.addressEnabled = addressEnabled;
}
/**
* 判断当前操作系统,返回相应的本地上传路径
*
* @return String
* @author Liangyixiang
* @date 2021/11/15
**/
public static String getUploadPath() {
OsInfo osInfo = SystemUtil.getOsInfo();
// 判断系统环境获取上传路径
if(ObjectUtils.isNotEmpty(osInfo) && osInfo.isWindows()){
return getWinUploadPath();
}else{
return getOtherUploadPath();
}
}
/**
* 获取业务系统名称
*/
public static String getSystemName() {
return getName();
}
}
name、addressEnabled 以及 winUploadPath、otherUploadPath 都是静态的成员变量,但是他们name、addressEnabled能获取到配置文件的值,winUploadPath、otherUploadPath不可以。
原因就是
winUploadPath、otherUploadPath对应的ser方法也定义为了静态方法。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~