springboot加載復(fù)雜的yml文件獲取不到值的解決方案
springboot加載yml文件獲不到值
今天使用spring boot讀取yml文件,這種多層嵌套的竟然無法讀取到(value注解spring.redis.pool.max.wait),即便加上全名也不行,然后網(wǎng)上搜到的內(nèi)容也未曾滿意,很多文章內(nèi)容都是一樣且重復(fù)的.最后放棄了查找,突發(fā)奇想之下解決了這個問題.
本文旨在如何讀取多層嵌套的yml文件,希望能幫到眾位.
以下是代碼:
package com.boot.config; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @ConfigurationProperties(prefix = "spring.redis;pool.max;pool.min") @PropertySource(value = "classpath:redis.yml") public class RedisConfiguration implements ApplicationListener<ApplicationEvent> { @Value("${host}") private String host; @Value("${port}") private Long port; @Value("${timeout}") private Long timeout; @Value("${database}") private Long database; @Value("${wait}") private Long poolMaxWait; @Value("${idle}") private Long poolMaxIdle; @Value("${idle}") private Long poolMinIdle; @Value("${active}") private Long poolMaxActive; public void onApplicationEvent(ApplicationEvent event) { // 打印屬性 System.out.println("============= redisConnect ================"); System.out.println(this.toString()); } @Override public String toString() { return "RedisConfiguration [host=" + host + ", port=" + port + ", timeout=" + timeout + ", database=" + database + ", poolMaxWait=" + poolMaxWait + ", poolMaxIdle=" + poolMaxIdle + ", poolMinIdle=" + poolMinIdle + ", poolMaxActive=" + poolMaxActive + "]"; } }
#多層配置 spring: redis: database: 0 host: localhost port: 6379 timeout: 0 pool: max: active: 8 wait: -1 idle: 8 min: idle: 0
日志打印如下所示:
============= redisConnect ================
RedisConfiguration [host=localhost, port=6379, timeout=0, database=0, poolMaxWait=-1, poolMaxIdle=0, poolMinIdle=0, poolMaxActive=8]
獲取不到y(tǒng)ml配置文件指定的值
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication? public class App { ? ? ?public static void main(String[] args) { ? ? ? ? SpringApplication app = new SpringApplication(App.class); ? ? ? ? ConfigurableApplicationContext context = app.run(args); ? ? ? ? System.out.println(context.getEnvironment().getProperty("jdbc.pwd")); ? ? ? ? ? context.close(); ? ?} }
apllication.yml 放置在classpath路徑下
jdbc: ?pwd: 123456 ?#冒號和數(shù)字之間有一個空格,沒有否則獲取失敗,pwd前面有縮進(jìn)兩個字符
ps:版本spring-4.3.2-release,springboot-1.4
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用spring框架實現(xiàn)數(shù)據(jù)庫事務(wù)處理方式
這篇文章主要介紹了使用spring框架實現(xiàn)數(shù)據(jù)庫事務(wù)處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java使double保留兩位小數(shù)的多方法 java保留兩位小數(shù)
這篇文章主要介紹了java使double類型保留兩位小數(shù)的方法,大家參考使用吧2014-01-01SpringBoot整合Redisson的步驟(單機(jī)版)
Redisson非常適用于分布式鎖,而我們的一項業(yè)務(wù)需要考慮分布式鎖這個應(yīng)用場景,于是我整合它做一個初步簡單的例子(和整合redis一樣)。2021-05-05