Spring Boot Web应用WAR部署后,如何实现application.properties可修改?
无需更换WAR部署方式,这几个方法轻松实现外部修改配置
嗨,不用纠结换部署方式的事儿!Spring Boot本身就提供了非常灵活的配置优先级机制,完全能让你在WAR包交付后,让对方轻松修改数据库相关的配置,不用重新打包或者换部署方式。给你几个实用的方案:
直接放置外部配置文件(最推荐)
Spring Boot会按照特定优先级加载配置,外部的配置文件优先级高于WAR包内部的。你只需要告诉对方把自定义的application.properties放在以下任意一个位置就行:- Tomcat安装目录下的
conf文件夹 - WAR包所在目录下新建的
config子文件夹 - 或者直接放在WAR包的同级目录(Spring Boot也会自动扫描)
这样启动Tomcat的时候,外部的配置会自动覆盖WAR包里的默认配置,对方只需要修改这个外部文件里的spring.datasource.url、spring.datasource.username、spring.datasource.password就行,非常直观。
- Tomcat安装目录下的
通过JVM启动参数指定配置文件
如果对方需要更灵活的路径,可以在启动Tomcat的时候,添加JVM参数来指定外部配置文件的路径:-Dspring.config.location=/absolute/path/to/your/application.properties要是同时想保留WAR包里的默认配置,只覆盖特定项,可以用
spring.config.additional-location参数:-Dspring.config.additional-location=/path/to/override.properties使用环境变量/系统属性
要是对方不想维护配置文件,也可以通过设置环境变量来覆盖配置。Spring Boot会自动识别以SPRING_DATASOURCE_开头的环境变量,比如:- 设置
SPRING_DATASOURCE_URL对应配置里的spring.datasource.url - 设置
SPRING_DATASOURCE_USERNAME对应spring.datasource.username - 设置
SPRING_DATASOURCE_PASSWORD对应spring.datasource.password
这种方式适合云环境或者自动化部署的场景,不用碰文件。
- 设置
总结一下:这些方案都不需要你更换WAR的部署方式,Spring Boot的配置体系天生就支持外部配置覆盖内部默认值,选最适合对方运维习惯的方式就行~
内容的提问来源于stack exchange,提问作者Nader




