springboot(maven)项目打包问题

问题说明:

今天在项目测试时遇到一个问题,启动项目时,修改外部配置文件后,会出现启动失败或者日志文件路径不对的情况。
我们的项目是springboot项目,采用jar包的方式运行,部分配置文件放在jar包外。

上述问题的原因是:运行的jar包内和jar包外同时存在相同名字的配置文件。

根据目前项目中的maven配置,打包时在jar包内会包含一份配置文件,而当jar包内和jar包外同时存在相同名字的配置文件时,会产生一定的冲突。(网上说有优先级选择,只会选一个,但实际测试发现两个都会生效)

解决办法:

我们之前的做法是,先打jar包,然后使用压缩软件把jar里的配置文件删除,确保只有jar包外才有配置文件。
但是测试以及后续生产过程进行打包部署时,并不太愿意这样操作,因此需要对这个打包并删除jar内的配置文件的过程进行简化。
具体的做法是,在项目的pom.xml文件中增加resources的配置:


<build>
<plugins>
<plugin>
<!--这里原本的配置,省略-->
</plugin>
</plugins>
<!--以下为新增配置-->
<resources>
<resource>
<directory>src/main/resources
<excludes>
<exclude>*.properties
<exclude>logback.xml
<exclude>*.dat
</excludes>
</resource>
</resources>
</build>

有了这个配置之后,打包的时候就会排除properties结尾的、dat结尾的文件,以及logback.xml文件,可以解决上述的问题。
需要注意的是,这时候jar包中就不再包含这些配置文件,部署时就需要把jar包和svn上的相关配置文件一同给予测试和生产。

新的问题及解决办法:

上述操作解决部署过程问题,但会带来新的开发过程问题。
虽然打包可以成功排除资源文件,简化打包部署的操作步骤,但是在eclipse中运行时也会找不到资源文件,从而导致启动失败。
解决办法是,在我们开发过程中把上述resources的这一段配置注释,需要进行打包外部运行前,解除注释。

上一篇:Redis学习笔记(九) AOF持久化


下一篇:使用API Explore 白屏化调用API创建报警规则