Spring Boot 部署运维
打成 jar 包
maven 默认会将项目打成 jar 包,也可以显示指出打包方式。
1 2 3 4 5 |
<groupId>com.neo</groupId> <artifactId>spring-boot-test</artifactId> <version>1.0.0</version> <!--指定打包方式--> <packaging>jar</packaging> |
pom.xml 同目录下,执行以下命令:
1 2 3 4 5 |
cd 项目跟目录(和pom.xml同级) mvn clean package ## 或者执行下面的命令 ## 排除测试代码后进行打包 mvn clean package -Dmaven.test.skip=true |
打包完成后 jar 包会生成到 target 目录下,命名一般是:项目名+版本号.jar。
启动 jar 包命令:
1 |
java -jar target/spring-boot-scheduler-1.0.0.jar |
这种方式,只要控制台关闭,服务就会停止。生产中我们一般使用后台运行的方式来启动:
1 |
nohup java -jar target/spring-boot-scheduler-1.0.0.jar & |
也可以在启动的时候选择读取不同的配置文件:
1 |
java -jar app.jar --spring.profiles.active=dev |
或者设置 jvm 参数:
1 |
java -Xms10m -Xmx80m -jar app.jar & |
打成 war 包
打成 war 包也非常的简单,但需要添加一些额外的配置。
(1)maven 项目,修改 pom 包,将
1 |
<packaging>jar</packaging> |
改为
1 |
<packaging>war</packaging> |
(2)打包时排除 tomcat:
1 2 3 4 5 6 7 8 9 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> |
在这里将 scope 属性设置为 provided,这样在打包产生的 war 中就不会包含此 jar
(3)注册启动类
创建ServletInitializer.java
,继承Spring BootServletInitializer
,覆盖configure()
,把启动类 Application 注册进去。外部 Web 应用服务器构建 Web Application Context 的时候,会把启动类添加进去。
1 2 3 4 5 6 |
public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } } |
最后执行:
1 |
mvn clean package -Dmaven.test.skip=true |
会在 target 目录下生成:项目名+版本号.war文件,复制到 Tomcat 服务器中启动即可。
如何重启
简单粗暴
直接 kill 掉进程再次启动 jar 包:
1 2 3 4 5 |
ps -ef|grep java ##拿到对于 Java 程序的 pid kill -9 pid ## 再次重启 Java -jar xxxx.jar |
当然这种方式比较传统和暴力,所以建议读者使用下面的方式来管理。
脚本执行
如果使用的是 maven,需要包含以下的配置:
1 2 3 4 5 6 7 |
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> |
启动方式:
(1)可以直接./yourapp.jar
来启动;
(2)注册为服务。
也可以做一个软链接指向 jar 包并加入到init.d
中,然后用命令来启动。
init.d 例子:
1 2 |
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp chmod +x /etc/init.d/yourapp |
这样就可以使用stop
或者是restart
命令去管理你的应用。
1 |
/etc/init.d/yourapp start|stop|restart |
或者
1 |
service yourapp start|stop|restart |
指定运行内存脚本,如以下start.sh文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#!/bin/sh RESOURCE_NAME=email-service.jar tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Stop Process...' kill -15 $tpid fi sleep 5 tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'Kill Process!' kill -9 $tpid else echo 'Stop Success!' fi tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo 'App is running.' else echo 'App is NOT running.' fi rm -f tpid nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms768m -Xmx768m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC /var/tomcat/EmailService/$RESOURCE_NAME >/dev/null 2>&1 & echo $! > tpid echo 'Start Success!' |
在文件目录下执行命令
1 |
army@studyserver:/var/tomcat/EmailService$ ./start.sh |
1 2 3 4 5 6 7 8 9 |
-XX:MetaspaceSize=128m (元空间默认大小) -XX:MaxMetaspaceSize=128m (元空间最大大小) -Xms1024m (堆最大大小) -Xmx1024m (堆默认大小) -Xmn256m (新生代大小) -Xss256k (棧最大深度大小) -XX:SurvivorRatio=8 (新生代分区比例 8:2) -XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器) -XX:+PrintGCDetails (打印详细的GC日志) |
1 2 |
>/dev/null 2>&1 不写log到nohup.out文件 |
如何给ubuntu添加一个开机启动脚本
1,新建个脚本文件new_service.sh
1 2 3 4 |
#!/bin/bash # command content # .................................. exit 0 |
2,设置权限
1 |
sudo chmod 755 new_service.sh |
3,把脚本放置到启动目录下
1 |
sudo mv new_service.sh /etc/init.d/ |
4,将脚本添加到启动脚本
执行如下指令,在这里90表明一个优先级,越高表示执行的越晚
1 2 |
cd /etc/init.d/ sudo update-rc.d new_service.sh defaults 90 |
移除Ubuntu开机脚本
1 |
sudo update-rc.d -f new_service.sh remove |
到此 Spring Boot 项目如何打包投产均已经介绍完。