java解析yml配置信息

java解析yml配置信息snakeyaml 包做解析有时候需要在静态代码块中加载配置文件 比如存到静态变量当中 项目启动时读取 这时 value 注解会失效 需要自己解析文件 试试 snakeyaml 包吧 先在 pom

大家好,欢迎来到IT知识分享网。

snakeyaml包做解析

有时候需要在静态代码块中加载配置文件(比如存到静态变量当中,项目启动时读取),这时value注解会失效,需要自己解析文件,试试snakeyaml包吧,先在pom.xml中引入依赖

@Component public class Config { static { // 文件名前面不能加斜杆 // 也可以使用 Loader.class.getClassLoader().getResourceAsStream InputStream in = Config.class.getClassLoader().getResourceAsStream("application-dev.yml"); assert in != null; // 防止出现中文乱码 // BufferedReader bf = new BufferedReader(new InputStreamReader(in)); Yaml yaml = new Yaml(); LinkedHashMap 
  
    obj = yaml.load(in); JSONObject myPropertyConfig = JSONObject.parseObject(JSONObject.toJSONString(obj.get("pay"))); System.out.println(myPropertyConfig.getJSONObject("alipay")); // 使用配置信息... } } 
  

Properties 类也可以加载yml,但是打印结果出来的是展平的结构,嵌套的属性解析失效了,类似于下面的多级结构就无法解析,返回的是null

java解析yml配置信息

image.png

value注解

public class Test { @Value("${pay.alipay.appId}") private String appId; }

这种常见的形式可以在当前类使用,共享的话需要提出来在单独的bean中解析,autowired 引用即可。

或者想做缓存的话,可以赋给静态变量,项目启动时开始读取。

public class InitAlipayBaseConfig implements ApplicationRunner { private static final CertAlipayRequest ALIPAY_BASE_CONFIG = new CertAlipayRequest(); @Value("${pay.alipay.appId}") private String appId; @Override public void run(ApplicationArguments args) { System.out.println("正在初始化 ......"); ALIPAY_BASE_CONFIG.setAppId(appId); } public static CertAlipayRequest getAlipayBaseConfig() { return ALIPAY_BASE_CONFIG; } }

这个 run 方法会在容器初始化完毕后自动执行

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/90215.html

(0)
上一篇 2026-03-30 09:45
下一篇 2026-03-31 22:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信