springboot加载复杂的yml文件获取不到值的解决方案

目录
  • springboot加载yml文件获不到值
  • 获取不到yml配置文件指定的值

springboot加载yml文件获不到值

今天使用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]

获取不到yml配置文件指定的值

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  #冒号和数字之间有一个空格,没有否则获取失败,pwd前面有缩进两个字符

ps:版本spring-4.3.2-release,springboot-1.4

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot中.yml文件的值无法读取的问题及解决

    目录 yml文件的值无法读取的问题 1.添加maven依赖 2.注解方式在需要使用变量名的类上加上注解 ,@Configuration 3..yml文件配置如下 yml文件不被识别 解决方法 yml文件的值无法读取的问题 1.添加maven依赖 <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-configuration-proce

  • 如何更优雅地获取spring boot yml中的值

    前言 偶然看到国外论坛有人在吐槽同事从配置文件获取值的方式,因此查阅了相关资料发现确实有更便于管理更优雅的获取方式. github demo地址: springboot-yml-value 1.什么是yml文件 application.yml取代application.properties,用来配置数据可读性更强,尤其是当我们已经制定了很多的层次结构配置的时候. 下面是一个非常基本的yml文件: server: url: http://localhost myapp: name: MyAppli

  • 关于springBoot yml文件的list读取问题总结(亲测)

    目录 springBoot yml文件的list读取问题 配置如下 1.定义配置类 2.定义启动的配置类 3.使用方式 读取yml文件里的list配置 YAML 支持以下几种数据类型 这里只介绍list类型的读取 拿到配置文件里的内容 springBoot yml文件的list读取问题 折腾了很久,记录下. 配置如下 # 自定义数据上报信息 xx: # 机组信息 machine1s: - name: XXXX frequency: null frequency-unit: null pressu

  • 基于SpringBoot bootstrap.yml配置未生效的解决

    我就废话不多说了,大家还是直接看代码吧~ <!--需要引入该jar才能使bootstrap配置文件生效--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </dependency> 补充知识:SpringBoot不读取bootstrap.yml/properti

  • springboot加载复杂的yml文件获取不到值的解决方案

    目录 springboot加载yml文件获不到值 获取不到yml配置文件指定的值 springboot加载yml文件获不到值 今天使用spring boot读取yml文件,这种多层嵌套的竟然无法读取到(value注解spring.redis.pool.max.wait),即便加上全名也不行,然后网上搜到的内容也未曾满意,很多文章内容都是一样且重复的.最后放弃了查找,突发奇想之下解决了这个问题. 本文旨在如何读取多层嵌套的yml文件,希望能帮到众位. 以下是代码: package com.boot

  • springboot启动时是如何加载配置文件application.yml文件

    今天启动springboot时,明明在resources目录下面配置了application.yml的文件,但是却读不出来,无奈看了下源码,总结一下springboot查找配置文件路径的过程,能力有限,欢迎各位大牛指导!!! spring加载配置文件是通过listener监视器实现的,在springboot启动时: 在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicationEvent事件是继承自ApplicationEvent时间的,代码如下

  • 详解springboot启动时是如何加载配置文件application.yml文件

    今天启动springboot时,明明在resources目录下面配置了application.yml的文件,但是却读不出来,无奈看了下源码,总结一下springboot查找配置文件路径的过程,能力有限,欢迎各位大牛指导!!! spring加载配置文件是通过listener监视器实现的,在springboot启动时: 在容器启动完成后会广播一个SpringApplicationEvent事件,而SpringApplicationEvent事件是继承自ApplicationEvent时间的,代码如下

  • Springboot 如何指定获取出 yml文件里面的配置值

    之前写过一篇获取properties文件里面的值: Springboot 指定获取自己写的配置properties文件的值 www.jb51.net/article/217899.htm 现在补充多一篇,指定获取yml里面的配置值 . 内容: 这里分别介绍两种方式,都是基于注解实现,分别是: @Value("${xxxxx.xx}") @ConfigurationProperties(prefix = "xxxxx") 进入主题: @Value("${xx

  • SpringBoot项目实战之加载和读取资源文件

    目录 通过Resource接口 手动加载 通过@Value自动转换 通过ResourceLoader加载 使用ResourceUtils加载资源 读取资源中的内容 通过File对象读取 通过InputStream对象读取 文末总结 本文聊一聊在 SpringBoot 应用中,访问加载类路径(classpath)中的文件内容的多种方法. 通过Resource接口 Resource接口抽象出一种更底层的方式管理资源,可以实现通过统一的方式处理各类文件资源.下面是几种获取资源实例的方法. 手动加载 访

  • 解决SpringBoot加载application.properties配置文件的坑

    SpringBoot加载application.properties配置文件的坑 事情的起因是这样的 一次,本人在现场升级程序,升级完成后进行测试,结果接口调用都报了这么个错误: 大概意思是https接口需要证书校验,这就奇怪了,项目启动加载的是包外的application.properties配置文件,配置文件里没有配置使用https啊.本人马上检查了下包内的application.properties配置文件,发现包内确实配置了https相关的配置项: 明明包外的配置文件优先级高于包内的,为

  • springboot加载命令行参数ApplicationArguments的实现

    目录 一.介绍 二.通过应用程序参数获取配置 1. 通过bean获取应用程序参数 2. 通过@Value注解获取 三.源码解读 - 封装应用程序参数 1. DefaultApplicationArguments 2. Source类 3. SimpleCommandLinePropertySource 4. SimpleCommandLineArgsParser 5. CommandLinePropertySource 6. PropertySource 四.源码解读 - 为什么可以通过@Val

  • SpringBoot加载外部依赖过程解析

    这篇文章主要介绍了SpringBoot加载外部依赖过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 公司一个项目的大数据平台进行改造,之前使用Structured Streaming作为实时计算框架,需要替换为替换为Kafka Streams,并使用SpringBoot包装,使其可以纳入微服务体系. 然而由于之前并没有接触过SpringFramework相关技术,并且项目工期较为紧张,因此只好花了2天时间看了看Spring和Spri

  • SpringBoot加载配置文件的实现方式总结

    目录 一.简介 二.代码实践 2.1.通过@value注解实现参数加载 2.2.通过@ConfigurationProperties注解实现参数加载 2.3.通过@PropertySource注解实现配置文件加载 2.4.通过自定义环境处理类,实现配置文件的加载 2.5.最后,我们来介绍一下yml文件读取 三.小结 一.简介 在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一.灵活的管理服务配置信息.比如,数据库.eureka.zookeeper.r

  • SpringBoot加载读取配置文件过程详细分析

    目录 配置文件的读取顺序 多坏境的配置文件 个性化配置 自定义配置文件名称和路径 加载yml文件 springboot默认读取的配置文件名字是:“application.properties”和“application.yml”,默认读取四个位置的文件:根目录下.根目录的config目录下.classpath目录下.classpath目录里的config目录下: 配置文件的读取顺序 根目录/config/application.properties 根目录/config/application.

随机推荐