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

京东云开发者
• 阅读 42

作者:京东科技 李意文

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>

最终效果如下:



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

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



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

特别注意:

java -jar XX

使用-jar启动java进程的,-classpath不会生效了,如果要加类路径,只能通过改maven的打包参数,从而使得.MF文件加了Class-Path属性后,才可以!!!!



4、到部署平台上新建conf文件夹,将要覆盖的配置文件加入进去

这样,部署平台的配置就会覆盖maven打包出来的配置文件



5、测试是否生效

在部署平台上,将部署平台上的配置文件里的,rpc框架的服务别名设置为:xxx

代码里的服务别名是yyy,然后通过测试发现生效的别名是xxx。



因为,springboot启动后,使用的是conf下配置文件,然后conf下的配置文件会被部署平台上新建的配置文件覆盖,

这样为不同的机房新建不同的配置文件,这样也就实现了springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的配置文件

点赞
收藏
评论区
推荐文章
Chase620 Chase620
3年前
VUE3(七)vue项目抽离.vue文件中的js、css代码
平常再做开发的时候,一般情况下不会将html,js,css代码写到一个文件中。基本上都会写在各自对应的文件中,然后再引入即可。那么在VUE中我们如何抽离vue文件中的js,与css代码呢?1:抽离javascriptHome.vue<template<div<div:style"{padding:'24px',back
Easter79 Easter79
3年前
springboot读取外部配置文件
springboot项目打成jar包后不好进行配置文件修改,可设置为读取外部配置文件,方便进行配置修改.步骤:1.将jar包中的application.properties配置文件复制到自定义路径下;2.运行jar包命令指定外部配置文件路径:nohupjavajar.jarspring.config.location
Easter79 Easter79
3年前
springboot服务优雅关机脚本
阅读文本大概需要3分钟。自从使用springboot开发项目后,服务很多时候都是打成jar包,然后通过javajarxx.jar的方式来启动程序的。比如下面这个脚本就是启动payserver的脚本,加载prd配置文件,启动后在后台运行,将日志写在jar包目录下的pafa.log 里!/bin/bash eja
Easter79 Easter79
3年前
springboot中切换配置(多个配置文件
问题描述:在springboot项目中可能有测试环境、开发环境、生产环境,在这些环境中我们可能要使用不同的配置,如果每次切换环境的时候都要重新写一份配置文件就很麻烦了,所以下面提供一种方法可以快速且简便的切换不同环境下的配置。解决方案:1、首先在resources目录下创建完整的配置文件(包括测试、开发、生产环境下的相关配置文件
Stella981 Stella981
3年前
FastDFS图片服务器实现图片上传
一、传统使用1.将fastdfs\_client.jar导入工程2.加载配置文件(如conf.properties),配置文件中的内容就是tracker服务的地址。配置文件内容:tracker\_server192.168.25.133:221223.把commonsio、fileupload的jar包添加到工程中4.页面代码!
Easter79 Easter79
3年前
SringBoot启动报日志配置错误
最近在启动项目的时候,报错,报错的原因是springBoot日志配置文件不对。由于自己是刚接触springboot,是同事帮忙解决的,自己非常感谢!先总结如下:1.首先,找到logbackspring.xml配置文件1<springPropertyscope"context"name"springAppNa
Easter79 Easter79
3年前
SpringBoot扫描不到组件?给你提供几种方案
最近接手一套基于SpringBoot项目,对项目进行重构调整,将公共部分抽离成子项目。在实践的过程中,发现抽离之后的模板中组件并没有被初始化。于是将排查解决过程中搜集到的方案及知识汇总分享给大家。问题原因问题的原因很简单,因多套系统的package命名不一致。比如业务系统的包命名为com.abc.xx,而公共(common)部分的包命名为c
Stella981 Stella981
3年前
SpringBoot扫描不到组件?给你提供几种方案
最近接手一套基于SpringBoot项目,对项目进行重构调整,将公共部分抽离成子项目。在实践的过程中,发现抽离之后的模板中组件并没有被初始化。于是将排查解决过程中搜集到的方案及知识汇总分享给大家。问题原因问题的原因很简单,因多套系统的package命名不一致。比如业务系统的包命名为com.abc.xx,而公共(common)部分的包命名为c
Stella981 Stella981
3年前
BitCoinCore配置文件解读
bitcoin.conf配置文件除了datadir和conf以外的所有命令行参数都可以通过一个配置文件来设置,而所有配置文件中的选项也都可以在命令行中设置。命令行参数设置的值会覆盖配置文件中的设置。配置文件是“设置值”格式的一个列表,每行一个。您还可以使用符号来编写注释。配置文件
京东云开发者 京东云开发者
11个月前
springboot 如何用 jar 包启动,同时为不同机房设置不同的配置文件 | 京东云技术团队
1、首先先把配置文件从jar中抽离示例代码:org.apache.maven.pluginsmavenjarplugin3.2.0/springxxx.xml2、把抽离的配置文件,放到conf目录下利用mavenassemblyplugin,抽取配置文件到