运行方式
Spring Boot应用程序有两种运行方式:
两种方式应用场景不一样,各有优缺点
jar包运行
通过maven插件spring-boot-maven-plugin,在进行打包时,会动态生成jar的启动类org.springframework.boot.loader.JarLauncher,借助该类对Spring Boot 应用程序进行启动。
优点:
缺点:
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 的部署。