今天使用spring boot读取yml文件,这种多层嵌套的居然没法读取到(value注解spring.redis.pool.max.wait),即使加上全名也不行,而后网上搜到的内容也不曾满意,不少文章内容都是同样且重复的.最后放弃了查找,突发奇想之下解决了这个问题.java
本文旨在如何读取多层嵌套的yml文件,但愿能帮到众位.redis
如下是代码:spring
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]