Spring Boot 部署运维

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

滚动至顶部