1、首先先把配置文件从 jar 中抽离
示例代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<excludes>
<exclude>**/spring-xxx.xml</exclude>
</excludes>
</configuration>
</plugin>
复制代码
2、把抽离的配置文件,放到 conf 目录下
利用 maven-assembly-plugin,抽取配置文件到 conf 目录下,
示例代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
复制代码
assembly.xml内容如下:
<assembly>
<id>assembly</id>
<formats>
<format>zip</format>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/src/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
<file>
<source>${basedir}/../xxx/target/classes/spring/spring-xxx.xml</source>
<outputDirectory>conf</outputDirectory>
</file>
<file>
<source>${basedir}/../xxx/target/classes/spring/spring-xxx.xml</source>
<outputDirectory>conf</outputDirectory>
</file>
</files>
</assembly>
复制代码
最终效果如下:
3、修改 maven 打包配置将 conf 加入到 classpath 中
示例代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>../conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
复制代码
最终达到的效果是:
将 springboot 的 jar 包解压后,可以看到.MF 文件中加了一个类路径 ../conf
特别注意:
java -jar XX
使用-jar 启动 java 进程的,-classpath 不会生效了,如果要加类路径,只能通过改 maven 的打包参数,从而使得.MF 文件加了 Class-Path 属性后,才可以!!!!
4、到部署平台上新建 conf 文件夹,将要覆盖的配置文件加入进去
这样,部署平台的配置就会覆盖 maven 打包出来的配置文件
5、测试是否生效
在部署平台上,将部署平台上的配置文件里的,rpc 框架的服务别名设置为:xxx
代码里的服务别名是 yyy,然后通过测试发现生效的别名是 xxx。
因为,springboot 启动后,使用的是 conf 下配置文件,然后 conf 下的配置文件会被部署平台上新建的配置文件覆盖,
这样为不同的机房新建不同的配置文件,这样也就实现了 springboot 的项目如何既要用 jar 包启动,同时还可以为不同的机房设置不同的配置文件
作者:京东科技 李意文
来源:京东云开发者社区 转载请注明来源
评论