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