CentOS7配置SpringBoot项目为war包以及Systemctl方式启动jar
SpringBoot有很多种部署方式,最简单的还是直接打成可执行jar,丢到服务器上运行。但是可能业务需求是war,简单配置下就能达成war包。总之很方便,这里记录下Systemctl的配置方式,防止需要。
References:
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file
- https://www.baeldung.com/spring-boot-war-tomcat-deploy
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-systemd-service
首先是将项目打成war包,虽然springboot内置了服务器,但有时候需要手动配置服务器,就需要项目为war的形式。修改配置简单的一种方式:
springboot项目的启动类继承SpringBootServletInitializer并重写其configure方法,如下:
@SpringBootApplication
@EnableScheduling
public class WechatApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
public static void main(String[] args) {
SpringApplication.run(WechatApplication.class, args);
}
}
然后就是修改打包生成的文件类型,以Maven为例,设置packaging为war:
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
最后就是确保内置的服务器不会影响到war包部署的服务器,这需要把内置的服务器配置为可选的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
特殊情况下的配置请查阅官方文档。
以上就是将springboot项目打包为war需要的配置。
如果tomcat需要在启动时指定配置文件位置,可以修改catalina.sh,250行左右,加上如下内容:
JAVA_OPTS="$JAVA_OPTS -Dspring.config.location=/opt/config/application.properties"
以上指定了配置文件位置。
下面是区别于上面的单独配置,将对其能在CentOS7上运行做一些配置,以Systemctl方式管理jar项目:
还是先配置文件,以Maven为例:
<build>
<!-- 打包文件名 -->
<finalName>weixinapp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 允许项目直接启动 -->
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
这样打好的jar包就可以在CentOS7上运行了,但是配置为Systemctl服务还需要在服务器上配置,简单点就是在/etc/systemd/system
路径下新建一个配置文件,如“wechat.service”,内容如下:
[Unit]
Description=wechat
After=network.target
[Service]
WorkingDirectory=/var/app
ExecStart=/usr/local/java/bin/java -jar /usr/local/wechat/weixinapp.jar --spring.config.location=/opt/config/application.properties
ExecStop=kill $MAINPID
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
具体配置的内容参考其他文章,这里不多介绍,唯一说明的就是--spring.config.location=/opt/config/application.properties
表示启动时读取配置文件的路径,这样就方便开发和生产的配置不同也不用切换,而且也不会暴露生产的配置信息。