最新闲着没事,搭建了一个springboot项目。由于springboot是基于javaApp方式启动内置tomcat。于是想到springboot在实际生产环境中如何进行发布和维护呢?经过一番调查与查阅资料,得到如下方案。
版本:2.1.0
1.发布jar包到linux服务器
1.1通过jar包启动
启动
打成jar包,通过java -jar leafer.jar方式启动
后台启动:
nohup java -jar leafer.jar >leafer.log 2>&1 &
启动之后发现,停止服务是个问题,生产环境总是kill肯定是不合理的。
(优雅)停止
<!-- 关闭服务的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置application.properties:
management.server.port=8081
management.endpoints.web.exposure.include=shutdown
management.endpoint.shutdown.enabled=true
management.endpoints.web.exposure.include=* // 允许ip
然后在linux终端,发送post请求,即可使服务停止。
curl -X POST http://192.168.25.22:10212/actuator/shutdown
1.2 通过服务启动
<!-- 注册服务使用 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
启动:
装载服务
sudo ln -s /usr/local/tomcat/apps/leafer.jar /etc/init.d/leafer2
授权:
chmod a+x leafer.jar
启动服务
Service leafer2 start
启动服务出现问题:unable find java
ln -s /usr/local/java/jdk1.8.0_171/bin/java /sbin/java 解决
设置开机自启
chkconfig leafer2 on
2.发布war包到linux服务器
Tomcat7.0 不兼容问题可能需要解决,还是使用第一种方法比较好。
- 修改pom packaging
- 排除依赖tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
- 添加tomcat运行时依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
相当于compile,但是打包阶段做了exclude操作-->
<scope>provided</scope>
</dependency>
- 继承SpringBootServletInitializer实现configure
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
- 打包发布即可