SpringBoot 配置文件外置不起作用,以及读取异常

SpringBoot配置文件外置,以及读取顺序

请参考:https://blog.csdn.net/mrluzle/article/details/79164342

 

-----------------------------------------------------------------------------------

 

今天j记录在把spring文件外置的时候,碰到两个比较坑的问题:

第一个坑:

在application.yml文件中有如下配置:

在代码中读取有两种方式

       方式一:

在该类的方法中就可以直接使用driverclass1了,driverclass1的值就是application.yml文件中配置的值。

注意:如果driverclass1声明成static类型,将获取不到配置文件中的值,最后值为null

例如下面这样就不行的,最后就拿不到值:

  @Value("${jdbc.master.driverclass}")
  private static String driverclass1;

 

       方式二:

按照上述方式获取,是没有问题的,但是同样,env变量不能声明成static类型

为了解决这个问题,最后加了一个PropertyUtils类来解决这个问题;

package com.everestfortune.riskmanagement.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PropertyUtil {
    
    private static final Logger log = LoggerFactory.getLogger(PropertyUtil.class);
    
    private static Properties properties;
    
    public static String getProperty(String key){
        
        
        if (properties==null) {//双重锁模式  
            
            synchronized(PropertyUtil.class){  
                
                if(properties==null){  
                    
                    properties = new Properties();
                    
                }  
            }  
            
            try {
                
                InputStream stream = PropertyUtil.class.getClassLoader().getResourceAsStream("application.yml");
                
                properties.load(stream);
                
                stream.close();
                
            } catch (FileNotFoundException e) {
                
                log.error(e.getMessage());
                
                e.printStackTrace();
                
            } catch (IOException e) {
                
                log.error(e.getMessage());
                
                e.printStackTrace();
                
            }
            
        }
        
        return properties.getProperty(key);
    }
}


最后,在静态方法中使用PropertyUtils对象去获取配置变量的值:

PropertyUtil.getProperty("key");

 

第二个坑:

在配置文件中用了开关,如下:

spring:
  profiles: 
    active: dev #默认环境(开发环境)
    #active: test #默认环境(测试环境)
    #active: prod #默认环境(生产环境)

可以切换active的值,来改变配置。

但是,但是,但是,,,,

使用上面的PropertyUtil去获取配置文件中配置的值时,发现永远取的都是prod(生产环境)的配置变量,

因为Property是不能识别springBoot的开关的,加载配置文件时候,后面的会覆盖前面的,

因为prod(生产环境)的配置,是写在配置文件的最后的,

所以使用PropertyUtil去取,取到的永远都是生产环境的!

 

结束!

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的司马光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值