spring boot加载复杂的yml文件获取不到值的问题

今天使用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]
相关文章
相关标签/搜索