分享

测试环境搭建——Spring Boot 部署

 TestOps云层 2021-06-22

相比传统的 Java Web ,Spring Boot 极大简化了配置,并且遵守约定优于配置的原则即使0配置也能正常运行,是目前最流行的 Java Web 开发框架。 

今天的测试环境小萌新篇给大家介绍关于 Spring Boot 的部署。

运行方式

Spring Boot应用程序有两种运行方式:

  • 以jar包方式运行

  • 以war包方式运行

两种方式应用场景不一样,各有优缺点

jar包运行

通过maven插件spring-boot-maven-plugin,在进行打包时,会动态生成jar的启动类org.springframework.boot.loader.JarLauncher,借助该类对Spring Boot 应用程序进行启动。

优点:

  • 本地无需搭建web容器,方便开发和调试;

  • 因为自带web容器,可以避免由于web容器的差异造成不同环境结果不一致问题;

  • 一个jar包就是全部,方便应用扩展;

  • 借助容器化,可以进行大规模的部署。

缺点:

  • 应用过于独立,难以统一管理;

  • 数据源无法通过界面进行管理;

  • 应用体积过大;

  • 修改web容器相关配置较为困难,需要借助代码实现。

war包运行

以war包方式运行,通过maven插件spring-boot-maven-plugin进行相关配置后,最终生成一个可运行在tomcat,weblogic等java web容器中的war包。

优点:

可以借助web容器管理界面对应用进行管理;

可以管理JNDI数据源;

web容器配置较为灵活,配置和程序分离;

应用体积较小,甚至可以借助web容器的包管理功能(比如weblogic Library)进一步减小应用大小。

缺点:

本地需要搭建web容器,对本地环境要求更高点,学习成本也响应更高;

调试较为困难,需要借助web容器;

无法兼容所有web容器(比如spring boot2.x无法运行在weblogic 11g上);

部署较为困难(比如和weblogic有较多的类冲突)。

在实际的项目中,并没有哪一种方式是最好的,根据不同的需求制定不同的部署方案,比如看中管理功能,要求数据源和tomcat相关配置必须由管理员进行管理,那么选择war包方式;如果希望借助容器化进行大规模部署,那么jar方式更适合。

这里我们介绍 jar 方式。

基本准备

Web 服务器

对于Spring Boot,Spring官方的建议是将Spring Boot应用打包成一个fat jar,通过java命令来启动运行。这个fat jar会把Tomcat内置进来,所以部署时也不需要单独配置Tomcat。

所以我们这里只安装配置向代理服务器——Nginx。

安装按照官方推荐的方式:

# 安装EPEL仓库

yum install epel-release

yum update

# 编译与安装

yum install nginx

# 查看安装版本:

nginx –v

# 启动服务

systemctl start nginx

数据库

我们使用最主流的数据库 MySQL。

安装与配置:

# 下载 MySQL 的 repo 源

wget http://repo./mysql-community-release-el7-5.noarch.rpm

# 安装 mysql-community-release-el7-5.noarch.rpm包

rpm -ivh mysql-community-release-el7-5.noarch.rpm

# 安装 MySQL  Server

yum install -y mysql-community-server

# 启动服务

systemctl restart mysql

# 设置密码

mysql>use mysql;

mysql>update user set password=password('123456') where user='root’;

mysql>exit;

# 重启服务

systemctl restart mysql

# 设置访问权限

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY “123456"; 

Spring Boot 部署

打包

对于Spring Boot 的打包可以通过编译或者直接使用Maven命令的方式。

IDEA打包:

Maven 命令:

# 清理已存在的编译结果

mvn clean

# 打包

mvn package

打包完成后将在targe目录生成对象的jar包。

注:

Jar的相关依赖信息、包名称等等在pom文件中进行设置。

部署

将打包后的文件放置在部署服务器的指定目录下,并设置指定权限,

在该目录下编辑启动脚本start.sh:

#!/bin/sh

#指定JDK目录&AppName

export JAVA_HOME=/usr/java/jdk1.8.0_191

APP_NAME=demo-0.0.1.jar

echo $APP_NAME

#nohup命令后台启动jar包并写入日志

nohup  java -jar $APP_NAME >>logs/start.log 2>>logs/startError.log &

#sleep等待15秒后,判断包含AppName的线程是否存在

sleep 15

if test $(pgrep -f $APP_NAME|wc -l) -eq 0

then

   echo "Start Failed"

else

   echo "Start Successed"

fi

停止脚本stop.sh:

#!/bin/sh

#指定AppName

APP_NAME=demo-0.0.1.jar

#找到包含AppName的进程

PROCESS=`ps -ef|grep $APP_NAME|grep -v grep  |awk '{ print $2}'`

#循环停用进程直到成功

while :

do

  kill -9 $PROCESS > /dev/null 2>&1

  if [ $? -ne 0 ];then

   break

  else

   continue

fi

done

echo 'Stop Successed'

给两个脚本赋予可执行权限后,即可使用脚本来启动或者停止 Spring Boot 服务。

配置 Nginx

在 /etc/nginx/conf.d 新建APP对应的配置文件demo.conf:

#反向代理配置内容

server {

    listen       80;        #监听80端口

    server_name  10.0.0.16; #绑定的域名

    access_log /var/log/nginx/nginx.log;

    error_log /var/log/nginx/nginx.error;

    location /api {            #转发或处理

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://10.0.0.16:8081/;

    }

    error_page   500 502 503 504  /50x.html;#错误页

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

}

注:

设置完成后重启或者重新加载Nginx

重新加载 Nginx:nginx -s reload

重启 Nginx:systemctl restart nginx

如此几步,简单完成Spring Boot 的部署。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多