其实说来大家都懂的那个Spring Boot小窍门,你用过没?
- 问答
- 2026-01-24 13:48:27
- 2
其实就是那个“用配置文件区分不同环境”的小窍门,你肯定听过,但可能没把它用得特别顺手,我最初也觉得这没什么,直到有次在测试环境把本地数据库给清了,才老实把它用起来。
简单说,就是在 application.properties(或者你喜欢的 application.yml) 旁边,放一堆名字带后缀的“兄弟文件”。
application-dev.properties(本地开发环境)application-test.properties(测试服务器环境)application-prod.properties(线上生产环境)
在主的 application.properties 里,根本不用写具体的数据库密码、Redis地址这些敏感或易变的东西,就写一行:spring.profiles.active=dev,这行意思是,当前激活的是“dev”这个环境配置,跑起来的时候,Spring Boot会把application.properties和application-dev.properties“合并”起来,dev”文件里的设置优先级更高,可以覆盖主文件。

好处一下子就来了:你本地开发时,连的是自己电脑的数据库,密码可能是“123456”;而测试环境的配置在application-test.properties里,连的是测试服务器的数据库,密码是公司统一的复杂密码;线上更是另一套。你根本不用每次部署前,战战兢兢地去主配置文件里修改那些容易出错的连接信息,切换环境,通常就改spring.profiles.active那一个值就行,甚至不用改。
怎么启动不同环境呢?有几种土办法但好用的招:

- 改主配置文件:就像上面说的,把
spring.profiles.active的值改成test或prod,虽然要改文件,但比改一堆零散的配置项安全多了。 - 用命令行参数:在打好的Jar包运行时,用命令
java -jar your-app.jar --spring.profiles.active=test,这是最常用的方式,发布脚本里指定一下就行,完全不用动包里的文件。 - 设系统环境变量:在服务器上设一个叫
SPRING_PROFILES_ACTIVE的系统环境变量,值为prod,Spring Boot会自动识别,这样连启动命令都不用改,特别干净。
我后来发现,这个小窍门还能玩出花。公共配置可以写在主application.properties里,比如服务器端口、一些基本的日志格式,而各环境不同的部分,就拆到对应的环境文件里,更细的话,你甚至可以在application-test.properties里再通过spring.profiles.include引入另一个更专门的配置,实现“配置文件继承”。
还有一个我踩过坑的地方:配置文件里的敏感信息,比如密码和密钥,最好不要明文写进去,哪怕是环境配置文件,可以用Jasypt这类工具加密(记得找个靠谱的密钥管理方式),或者直接利用云平台或容器提供的秘密管理服务,但那是后话了,对于大部分内部应用,先把环境隔离开,已经是向前一大步。
这个“用不同配置文件区分环境”的窍门,核心就一点:把会变的东西和不变的东西分开,把属于环境的东西和属于应用本身的东西分开,它没什么高深技术,但认真用起来,能避免很多“本地是好使的”这种尴尬,让部署变得省心不少,很多团队规范里都会要求这么做,算是Spring Boot项目里一个最基础也最重要的“卫生习惯”了。
(参考来源:Spring Boot官方文档关于“Externalized Configuration”和“Profiles”的章节,以及广泛存在的开发者社区实践讨论,如Stack Overflow上关于多环境配置的各类问答。)
本文由符海莹于2026-01-24发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/85118.html
