场景:客户现场进行项目演示。
如果是使用自己电脑的环境还好,要是使用客户提供的内部环境,就会涉及项目配置参数的修改,比如数据库信息或项目启动端口。那你会想,重新打个包就好了啊,想那么都干嘛,但不是每次去现场演示都会有开发人员在场,去做演示的可能是产品经理或项目经理,可能不懂开发,让他们去做开发做的事等于终结了这次演示。这就有了动态修改配置的需求。修改配置可比重新打包项目要简单多了,找到配置文件目录,找到配置文件中对应的key,按照客户提供的环境修改value,搞定。
下面说说实现过程。
SpringBoot打包时默认会把src/main/resources中的配置文件全部放入jar包中,这样我们是改不了配置文件的。我们需要把配置文件放在外部,让SpringBoot启动时从外部加载,这里就需要使用SpringBoot的特性 - Externalized Configuration 外部化配置。 SpringBoot启动参数:—spring.config.additional-location=”path/to/yml/folder” 。
我的思路是将SpringBoot配置文件拆分为2个,需要的修改参数的放入1个文件,不需要修改的参数放入1个文件,这样便于快速定位。然后使用maven-jar-plugin插件在打包时将需要修改的配置文件移除,不放入jar包中。我的maven-jar-plugin配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<excludes>
<exclude>application-server.yml</exclude>
</excludes>
</configuration>
</plugin>
附上完整的启动命令:
java -Xms128m -Xmx256m -jar path/to/springboot.jar --spring.config.additional-location=file:/path/to/conf/ --logging.config=/path/to/conf/logback.xml springboot.springboot >> /path/to/logs/springboot.out 2>&1 &