springboot以jar包运行
公司的springboot项目本来是打war包的,突然要求改成jar包,一路上碰到一些坑,在此记录一下。
一、pom文件配置
1、打包方式改成jar
<packaging>jar</packaging>
2、配置可执行jar包的maven插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 如果有依赖外部jar,则必须加上此配置includeSystemScope--> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build>
3、引入外部jar依赖(可选)
如果项目中引入了外部jar,可在项目根目录创建lib文件夹,将jar包放入lib中:
然后在pom文件中引入jar包:
PS:如果项目以war的形式打包,并且引入了外部jar,则maven插件的配置如下
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <webResources> <resource> <directory>${project.basedir}/lib</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin> </plugins> </build>
二、打包运行
1、打包
打包命令,很简单:
mvn install
2、运行
在生产和测试环境,一般都需要保持进程一直在后台运行,断开终端也不中断,则需要执行以下命令:
nohup java -jar test.jar &>>log.out &
三、配置文件优先级
spring boot会按以下顺序去寻找配置文件:
1、“当前目录”的/config文件夹下
2、“当前目录”下
3、classpath的/config文件夹下
4、classpath下
注意事项:
- 当前目录指的是执行java命令所在目录,如果是通过shell脚本执行的java命令,则当前目录指shell脚本所在目录,如果在shell脚本中cd到某一目录再执行的java命令,则当前目录就指cd后的目录。
- 不同优先级的配置文件都能被读到,但相同的配置项,优先级高的配置文件的配置会覆盖优先级低的配置文件的配置。
- jar包内的配置文件不方便修改,生产上我们一般会将配置文件放在jar包外。
生产上可以直接将配置文件放在jar包所在目录同级的config目录,然后在脚本中cd到jar包所在目录,执行java命令就可以读到配置文件啦。