Java如何使用ConfigurationProperties获取yml中的配置
程序员文章站
2022-06-09 16:41:03
目录使用configurationproperties获取yml的配置使用方法@configurationproperties获取不到配置文件属性值问题原因就是使用configurationprope...
使用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方法也定义为了静态方法。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
Java分享笔记:使用keySet方法获取Map集合中的元素
-
如何更优雅地获取spring boot yml中的值
-
java多线程中的join 方法、yield方法如何使用
-
Java如何获取VMware中Vcenter/ServerInstance下的各种硬件信息
-
spring boot中关于获取配置文件注解的使用@ConfigurationProperties、@Value、@PropertySource
-
Springboot如何获取配置文件application.yml中自定义的变量并使用
-
SpringBoot中如何优雅的读取yml配置文件?
-
java项目中,如何加密配置文件中的敏感信息
-
App中如何获取gradle的配置信息