springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的配置文件
作者:京东科技 李意文
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包启动,同时还可以为不同的机房设置不同的配置文件
审核编辑 黄宇