Java(一百五十二)SpringBoot项目快速打包成jar项目与部署

92 阅读4分钟

上文中,tomcat配置完成了。接下来我们需要将我们的项目打包部署至tomcat服务器。

 

传统的Web应用进行打包部署时,通常会打成War包的形式,然后将War包部署到Tomcat等服务器中,而SpringBoot应用使用的是嵌入式Servlet容器,也就是说,SpringBoot应用默认是以jar包形式进行打包部署的,而如果想要使用传统的War包形式进行打包部署,就需要进行一些配置。

 

由于Spring Boot应用中已经嵌入了Tomcat服务器,所以将Spring Boot应用以默认jar包形式进行打包部署非常简单和方便。

1:项目打jar包

SpringBoot项目maven打包插件配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--热部署配置-->
    <configuration>
        <!--fork:如果没有该项配置,整个devtools不会起作用-->
        <fork>true</fork>
    </configuration>
</plugin>

 

打包操作就很简单了,如下图所是示:

1.jpg

如果没有出现其他的错误的话,那你就会在项目根目录下的target目录下发现一个.jar文件,如下图所示:

2.jpg

我们可以通过命令行启动这个jar文件。

java -jar xxxxxx.jar

执行结果如下图所示:

3.jpg

接下来我们在浏览器中访问:

http://localhost:7099/testsss

如下效果如下图所示:

4.jpg

 

后台运行命令:

nohup java -jar app.jar >/dev/null 2>&1 &

加入配置参数命令:

nohup java -Xms512M -Xmx512M -jar app.jar --server.port=9080 spring.profiles.active=prod >nohup.out 2>&1 &

 

2:部署至linux

我的linux服务器系统是centos

 

app-server-auto.sh:

#!/bin/sh
# chkconfig: 2345 10 90
# description: myservice ....
# ./app.sh start 启动 stop 停止 restart 重启 status 状态
AppName=app-server.jar
#应用端口
SERVER_PORT=8080
# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
 
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi
 
if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi
 
function start()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
 
    if [ x"$PID" != x"" ]; then
    echo "$AppName is running..."
    else
        nohup java $JVM_OPTS -jar $AppName\
        --server.port=$SERVER_PORT \
        --spring.profiles.active=mysql-test \
        --jasypt.encryptor.password=123456 \
    > /dev/null 2>&1 &
        echo "Start $AppName success..."
    fi
}
 
function stop()
{
    echo "Stop $AppName"
 
    PID=""
    query(){
        PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
    }
 
    query
    if [ x"$PID" != x"" ]; then
        kill -TERM $PID
        echo "$AppName (pid:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            query
        done
        echo "$AppName exited."
    else
        echo "$AppName already stopped."
    fi
}
 
function restart()
{
    stop
    sleep 2
    start
}
 
function status()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}
 
case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)
 
esac

 

3、开机启动

(1):启动脚本app-server-auto.sh拷贝至/etc/rc.d/init.d目录

注:需要把启动脚本中的路径都修改成绝对路径

 

(2):给脚本app-server-auto.sh和jar包app-server.jar 添加权限

sudo chmod +x /etc/init.d/app-server-auto.sh
sudo chmod +x /home/xxx/app-server.jar

(3):添加到chkconfig 并把chkconfig作为系统服务 然后设置开机自启

#添加为系统服务
sudo chkconfig --add  app-server-auto.sh
#设置为开机启动
sudo chkconfig app-server-auto.sh on
# 启动服务 查看脚本是否正确
sudo service app-server-auto.sh start

3:注册服务

(1):创建服务目录

#创建目录
mkdir /usr/share/nginx/html/java

 

(2):创建应用启动用户并授权

#创建组
getent group java || groupadd -r java
#创建用户
getent passwd java || useradd -r -d /opt -s /bin/nologin -g java java

 

(3):更改目录权限

chown -R java:java /usr/share/nginx/html/java

 

(4):注册应用服务

在/usr/lib/systemd/system目录下增加app.service,目录必须是绝对目录

vi /usr/lib/systemd/system/app.service

输入以下内容:

[Unit]
Description=App-server description
After=syslog.target
 
[Service]
User=java
Group=java
 
ExecStart=/usr/local/jdk-11.0.22/bin/java -Xms512M -Xmx512M -jar /usr/share/nginx/html/java/app-server.jar
SuccessExitStatus=143
 
[Install]
WantedBy=multi-user.target

 

刷新命令

systemctl daemon-reload

 

管理命令(app名字的由来是因为在/usr/lib/systemd/system/下创建的app.service)

#配置开机启动
systemctl enable app
#删除开机启动
systemctl disable app
#启动
systemctl start app
#停止
systemctl stop app
#重启
systemctl restart app
查看启动状态
systemctl status app
#刷新服务
systemctl daemon-reload
#查看日志
journalctl -u springboot.service

 5.jpg

部署成功!!!

 

 

二:java项目部署nginx

server {
        listen       80;
        server_name  java.guanchao.site;#填写你的域名
        location / {
                proxy_pass   http://127.0.0.1:7099;  # 表示代理到指定的ip地址,就是你之前服务器访问的地址带上端口号
                proxy_set_header Host $host;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
        }
        access_log /home/logs/java.guanchao.site.log;  # 注意注意:需要提前创建在对应路径下创建logs目录,否则重启nginx会报错!
}

重启nginx

systemctl restart nginx

 

浏览器访问:java.guanchao.site/testsss

如下图所示:

6.jpg

SpringBoot打包jar项目部署nginx成功!

推荐:

Spring Boot官方更推荐使用可执行的JAR(executable JAR)打包方式,而不是WAR文件。Jar方式有如下三个优点

1.方便快捷

2.更好的可移植性

3.更好的性能

 

有好的建议,请在下方输入你的评论。