在 Spring boot 项目中,我们已经习惯了多环境配置文件的使用。最近在维护旧项目时,因运行环境较多,一时起念,非 Spring boot 项目能实现多环境配置文件的配置和切换吗?经过查找资料,发现 Maven 早已提供了 profile 来实现多环境配置。真是孤陋寡闻,记录以学习之。
方式一:filter 方式
- 编写多环境配置文件,分别定义主配置文件
application.properties和两个环境配置文件application-dev.properties、application-test.properties:
- application.properties
1 | jdbc.username=${env.jdbc.username} |
- application-dev.properties
1 | env.jdbc.username=dev |
- application-test.properties
1 | env.jdbc.username=test |
由上面文件中看到,我们在主配置文件并未定义实际值,而是引用环境配置中对应 key 的值。
- 在 pom.xml 中配置 profile:
1 | <profiles> |
由上面文件中看到,我们配置了两套环境配置 dev 和 test。
- 在 pom.xml 中配置 filter 和 resource:
1 | <build> |
注意:<filtering>true</filtering>不可遗漏。
- 打包运行:
1 | 不指定运行环境,默认是 activeByDefault=true的环境,当前是指开发环境 |
打包执行完成后,我们在 target 目录下的 applincation.properties 中可以看到值是随着指定运行环境变化的。
方式二:resource 方式
- 在 resources 下建立多个环境目录放置各自的配置文件:
- env/dev/application.properties
1 | jdbc.username=dev |
- env/test/application.properties
1 | jdbc.username=test |
- 在 pom.xml 中配置 profile:
1 | <profiles> |
由上可以看出,两种方式在这一步是一致的,区别主要在下一步。
- 在 pom.xml 中配置 resource:
1 | <build> |
- 打包运行:
和方式一一样的操作,打包后,可以看到只有一套配置文件出现在 target 目录里。
小结
- 方式一,会把多个环境的配置文件都打包进去,且主要针对属性文件,如果有多个文件或者其他类型文件,这种方式是不容易处理的;
- 方式二,只打包指定环境的配置文件,且会打包整个文件夹,更方便一点;
- 展开一下思路,Springboot 其实是类似方式一的,如果 Springboot 项目想要只打包指定环境的配置文件,可以和方式二结合一下,一起处理。
原文链接: https://xinghuipeng.pages.dev/2023/04/10/work/java/Maven项目实现多环境配置文件/
版权声明: 转载请注明出处.