记录读取不同环境配置的方法和坑

一、背景

   之前一直从事的是.net平台开发。公司技术转型为使用java语言开发。

   在开发项目时,因为项目比较小且是初期项目,有些数据直接坐到配置里面。根据不同环境读取不同配置数据。

二、配置在哪里

     参照公司其他java项目,都是配置在yml中。故,我也如此配置。配置如下:

 

配置内容:

partnerconfig:
    clientId: 43093
    accessKey: 04B05F95F9A7895FCA55C394E0FFD859A1FC3427

三、如何根据不同环境读取不同配置

网上有多重说法。后来选取了如下伪代码的写法:

@Data
@Configuration
@ConfigurationProperties(prefix = "partnerconfig")
public class PartnerInfoConfig {

    //@Value("${clientId}")
    private String clientId;

   // @Value("${accessKey}")
    private String accessKey;
}

注:这种写法,一方面可以在类上打上ConfigurationProperties注解,指定配置层级的前缀。这样的好处是,直接可以定义和配置key名称一样的字段。

四、如何使用

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Autowired
    private PartnerInfoConfig partnerInfoConfig;

    /*
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {       
        registry.addInterceptor(new SignatureVerificationInterceptor(partnerInfoConfig)).addPathPatterns("/**");

        WebMvcConfigurer.super.addInterceptors(registry);
    }

在类中定义如下配置:

@Autowired
private PartnerInfoConfig partnerInfoConfig;

这样就可以获取到yml中的配置了。

那么如何控制读取不同环境的配置呢?只要修改application.yml中active的值即可。(值有:dev、local、prod、test)

spring:
  profiles:
    active: dev

后记

如上是最终实现的过程。但是在其过程中,遇到了不少需要注意的点。再次记录一下,方便后来者参考。

1、在写yml配置时,冒号之后的空格千万不能丢,否则,将读不出配置数据。ide也不会报错提醒。这真是个让人拍大腿的大坑。(ps:格式化代码时,idea为何不能自动留出空格。苦笑~)

两种写法案例比较:

#冒号后有空格
clientId: 43093

#冒号后没有空格
clientId:43093

2、在搜索资料时,发现有的人用的是properties配置,有的人是用yml配置。那两者有何区别和联系呢?看这个博文: 面试突击74:properties和yml有什么区别? - Java中文社群 - 博客园

推荐还是使用yml配置。

3、在自定义的HandlerInterceptor拦截器中,是没法直接定义配置类获取到配置数据的。需要从

WebMvcConfigurer实现类中传入。

 

代码如下:

public class SignatureVerificationInterceptor implements HandlerInterceptor {

    private static PartnerInfoConfig partnerInfoConfig;

    public SignatureVerificationInterceptor(PartnerInfoConfig partnerInfoConfigParam) {
        partnerInfoConfig = partnerInfoConfigParam;
    }

4、起初在网上搜索了不少根据不同环境读取不同配置的博文。有不少方案,但是如上方便可能是最容易简单的。

很多地方引用了如下这个博文。博文中的方法应是可以的,但是比较麻烦。当然,这个是因为自定义了yml文件名称。

spring boot 不同环境读取不同的配置文件(yml)_hank009的博客-CSDN博客

文中有不对或者不妥的地方,欢迎诸君批评指正。

欢迎加微信交流:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值