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 项目如何打包投产均已经介绍完。