写点什么

springboot 的项目如何既要用 jar 包启动,同时还可以为不同的机房设置不同的配置文件

  • 2024-10-17
    北京
  • 本文字数:1520 字

    阅读完需:约 5 分钟

作者:京东科技 李意文

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 包启动,同时还可以为不同的机房设置不同的配置文件

发布于: 刚刚阅读数: 5
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的配置文件_京东科技开发者_InfoQ写作社区