作者:京东科技 李意文
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 包启动,同时还可以为不同的机房设置不同的配置文件
评论