作者:京東科技 李意文
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包啟動,同時還可以為不同的機房設定不同的配置檔案