spring boot載入複雜的yml檔案獲取不到值的問題
阿新 • • 發佈:2022-04-29
今天使用spring boot讀取yml檔案,這種多層巢狀的竟然無法讀取到(value註解spring.redis.pool.max.wait),即便加上全名也不行,然後網上搜到的內容也未曾滿意,很多文章內容都是一樣且重複的.最後放棄了查詢,突發奇想之下解決了這個問題. 本文旨在如何讀取多層巢狀的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]