最简单的基于Maven实现Spring Boot多环境配置和切换

在做Spring boot工程时,我们希望将那些需要区分环境的配置项挑出来,当idea中勾选了Profiles时,可以动态切换配置项。有两个实现方案:

方案一

听说Spring boot天生支持多环境的配置,具体配置方式如下:

  1. 分别创建开发、测试、线上环境的配置文件,文件名需要满足application-{profile}.properties的格式
  • application-dev.properties
  • application-test.properties
  • application-pro.properties
  1. 决定哪个配置生效,需要在application.properties中通过spring.profiles.active属性来设置

application.properties

spring.profiles.active=dev

完美收工!NO~
这不够智能,我们想在idea里勾选Profiles,然后自动切换环境配置,自动!自动!自动!
评价:

  • application-{profile}.properties里面放全量配置吗?其实区分环境的配置项可能很少,这会造成大量的冗余,很难保持这些冗余配置项的一致性。
  • application.properties里面只放一个激活配置,总感觉这不应该是它本来的面目。

方案二

其实可以结合Maven的filters更加优雅的实现自动切换环境

  1. 提取区分环境的配置项,放在resources/env/{profile}.properties,记住这里不是全量配置
datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
datasource.username=root
datasource.password=123456
  1. application.properties文件以变量的形式注入resources/env/{profile}.properties中的配置,这里使用${}不会生效,亲测@@可用
[email protected]@
[email protected]@
[email protected]@
  1. 使用profiles在pom中配置多环境

    
        dev
        
            dev
        
        
            true
        
    
    
        test
        
            test
        
    
    
        simulation
        
            simulation
        
    
    
        pro
        
            pro
        
    

  1. 使用filters过滤出激活的配置
 
    
        src/main/resources/env/${profiles.active}.properties
    
    
    
        
            src/main/resources
            
                env/*
            
        
        
            src/main/resources
            
                application.properties
            
            true
        
    

OK!现在勾选idea中的profile然后编译、打包是可以将不同环境的配置注入到application.properties中的。
评价:

  • 没有冗余不区分环境的配置
  • application.properties还是Spring Boot配置的主场所

以上,欢迎大家一起探讨学习~

你可能感兴趣的:(最简单的基于Maven实现Spring Boot多环境配置和切换)