Java如何使用ConfigurationProperties获取yml中的配置

网友投稿 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小时内删除侵权内容。

上一篇:使用jupyter notebook运行python和R
下一篇:python numpy 初识(python怎么读)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~