springboot的專案如何既要用jar包啟動,同時還可以為不同的機房設定不同的配置檔案

京东云开发者發表於2024-10-17

作者:京東科技 李意文

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包啟動,同時還可以為不同的機房設定不同的配置檔案

相關文章