当前位置: 首页 > news >正文

单机启动/开机启动SpringBoot服务的正确方式

  此操作只针对于测试环境或单机部署的情况下,使用Jenkins自动化部署或docker部署SpringBoot服务请忽略。

SpringBoot单机启动和集群启动的区别:

  • 部署方式:单机启动可以直接运行jar文件或使用IDE启动应用程序,而双机集群启动需要将应用程序部署在多台机器上,并配置负载均衡器。
  • 数据一致性:单机启动的应用程序只有一个实例,数据一致性相对简单。而双机集群启动的应用程序有多个实例,需要考虑数据同步和一致性的问题。
  • 扩展性:单机启动的应用程序可以通过增加机器的性能进行扩展,而双机集群启动的应用程序可以通过增加机器的数量进行扩展。
  • 故障处理:在单机启动中,如果应用程序出现故障,可能会导致整个服务不可用。而在双机集群启动中,即使一个应用程序出现故障,其他应用程序仍然可以继续处理请求。

  总而言之,单机启动适用于开发和测试环境,对并发请求要求不高的小型应用程序。而双机集群启动适用于生产环境,以确保应用程序的稳定性和可扩展性。

一、安装Java运行时环境,这里我们使用开源免费的OpenJDK11

  1. 查看OpenJDK11安装包列表
yum list|grep java-11-openjdk
  1. 执行安装命令
yum install -y java-11-openjdk.x86_64
  1. 查看安装成功的版本
[root@localhost ~]# java -version
openjdk version "11.0.21" 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.21.0.9-1.el7_9) (build 11.0.21+9-LTS, mixed mode, sharing)
  1. 设置JAVA_HOME
  • 通过命令查找java安装的真实路径,使用which java找到的是软链接,需要通过ll命令一层层查找真实路径,我们这边最终/usr/bin/java真实的路径为 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java,那么我们的JAVA_HOME就是java的安装目录/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64,去掉 末尾的 /bin/java 。
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan  2 16:13 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 64 Jan  2 16:13 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
[root@localhost ~]# ll /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
-rwxr-xr-x 1 root root 13192 Nov 15 00:51 /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64/bin/java
  • 编辑/etc/profile文件,添加JAVA_HOME配置,并使用source /etc/profile命令使环境配置生效,不需要配置CLASS_APTH, rt.jar, tools.jar。
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.21.0.9-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

二、编写启动、停止SpringBoot服务的Shell脚本

  1. 定义运行服务需要的参数,服务名称、服务程序路径、日志文件等,这里可以感觉自己的需要来定义,包括可以添加java -jar的运行参数等。
#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令号提示服务名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路径
LOG_FILE="/opt/server/gitegg-application.log" # 日志输出文件路径,一般我们服务会记录日志,如果不想在这里输出,那么可以填写 /dev/null
  1. 定义命令脚本运行提示,如果输入的命令格式错误,这里可以给出正确的命令格式等。
#使用说明,提示输入参数
usage() {echo "Usage: sh start_server.sh [start|stop|restart|status]"exit 1
}
  1. 定义检查服务是否正在运行的函数
#检查服务是否正在运行
is_running(){pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; thenreturn 1elsereturn 0fi
}
  1. 定义启动服务的函数
#启动服务
start(){is_runningif [ $? -eq "0" ]; thenecho "${APP_NAME} is already running. pid=${pid} ."elsenohup java -jar $APP_PATH > $LOG_FILE 2>&1 &fi
}
  1. 定义停止服务的函数
#停止服务
stop(){is_runningif [ $? -eq "0" ]; thenkill -9 $pidelseecho "${APP_NAME} is not running"fi
}
  1. 定义查看服务运行状态的函数
#显示运行状态
status(){is_runningif [ $? -eq "0" ]; thenecho "${APP_NAME} is running. Pid is ${pid}"elseecho "${APP_NAME} is NOT running."fi
}
  1. 定义服务重启函数
#重启服务
restart(){stopstart
}
  1. 脚本接收参数,根据参数执行对应的命令函数
#选择要运行的命令
case "$1" in"start")start;;"stop")stop;;"status")status;;"restart")restart;;*)usage;;
esac
  1. 设置脚本执行权限,填写自己脚本文件的实际路径
chmod +x /opt/server/start_server.sh
完整的执行脚本如下:
#!/bin/bash
APP_NAME="gitegg-application.jar" # 命令号提示服务名
APP_PATH="/opt/server/gitegg-application.jar" # jar包文件路径
LOG_FILE="/opt/server/gitegg-application.log" # 日志输出文件路径,一般我们服务会记录日志,如果不想在这里输出,那么可以填写 /dev/null#使用说明,提示输入参数
usage() {echo "Usage: sh start_server.sh [start|stop|restart|status]"exit 1
}#检查服务是否正在运行
is_running(){pid=`ps -ef|grep $APP_PATH|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; thenreturn 1elsereturn 0fi
}#启动服务
start(){is_runningif [ $? -eq "0" ]; thenecho "${APP_NAME} is already running. pid=${pid} ."elsenohup java -jar $APP_PATH > $LOG_FILE 2>&1 &fi
}#停止服务
stop(){is_runningif [ $? -eq "0" ]; thenkill -9 $pidelseecho "${APP_NAME} is not running"fi
}#显示运行状态
status(){is_runningif [ $? -eq "0" ]; thenecho "${APP_NAME} is running. Pid is ${pid}"elseecho "${APP_NAME} is NOT running."fi
}#重启服务
restart(){stopstart
}#选择要运行的命令
case "$1" in"start")start;;"stop")stop;;"status")status;;"restart")restart;;*)usage;;
esac

三、编写启动、停止SpringBoot服务的Shell脚本
  在CentOS中的服务是由systemd管理的,可以通过systemctl命令进行服务运行的相关操作。

  1. 新增管理服务gitegg-server.service,服务名称可以自己定义,此服务放到 /lib/systemd/system/ 目录
vi /lib/systemd/system/gitegg-server.service
  1. 编写服务内容
[Unit]                                                                                                                                                                                                               
Description=gitegg-server                                                                                                                                                                                  
After=docker.socket early-docker.target network.target
Wants=network-online.target docker.service
Requires=docker.socket                                                                                                                                                                                            [Service]                                                                                                                                                                                                            
Type=forking                                                                                                                                                                                                         
ExecStart=/opt/server/start_server.sh start
ExecStop=/opt/server/start_server.sh stop            
ExecSatus=/opt/server/start_server.sh status                                              
ExecRestart=/opt/server/start_server.sh restart                                                       [Install]                                                                                                                                                                                                            
WantedBy=multi-user.target
  1. 保存并重新加载配置
systemctl daemon-reload
  1. 设置服务开机启动
systemctl enable gitegg-server.service
  1. 可以直接使用systemctl 命令操作服务
# 启动服务
systemctl start gitegg-server.service
# 关闭服务
systemctl stop gitegg-server.service
# 查看服务状态
systemctl status gitegg-server.service
# 重启服务
systemctl restart gitegg-server.service

  单机启动是指在一台机器上启动一个Spring Boot应用程序。在单机启动的情况下,应用程序运行在一个独立的进程中,并且只能处理一个请求。单机启动适用于开发和测试环境,以及对并发请求要求不高的小型应用程序。
  通过以上配置,当服务器重新启动时,jar文件也将自动运行。请注意,这只是在CentOS系统实现的一种方法,实际操作可能因操作系统版本和个人设置而有所不同。

http://www.lryc.cn/news/302854.html

相关文章:

  • [C#]winform基于opencvsharp结合CSRNet算法实现低光图像增强黑暗图片变亮变清晰
  • 抓包分析 TCP 协议
  • 代码随想录算法训练营day27 | 93.复原IP地址、78.子集、90.子集II
  • RuntimeError: CUDA out of memory.【多种场景下的解决方案】
  • LeetCode刷题| Leetcode 45. 跳跃游戏,1190. 反转每对括号间的子串,781. 森林中的兔子,739. 每日温度
  • Redis(03)——发布订阅
  • ⭐北邮复试刷题LCR 034. 验证外星语词典__哈希思想 (力扣119经典题变种挑战)
  • ECMAScript 6+ 新特性 ( 二 )
  • JS游戏项目合集【附源码】
  • React中hooks使用限制及保存函数组件状态
  • 用git命令来上传项目到GitHub我自己的仓库
  • .NET有哪些微服务框架
  • uniapp中打开蓝牙需要哪些权限
  • virtualbox虚拟机运行中断,启动报错“获取 VirtualBox COM 对象失败”
  • 【JVM篇】什么是运行时数据区
  • Jetpack 之Glance+Compose实现一个小组件
  • 实时矢量搜索如何彻底改变各行各业?
  • 【Linux】指令 【scp】
  • 文件IO,目录IO的学习
  • leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12
  • BUGKU-WEB bp
  • 代码的复用——Mixin使用例子
  • easyx 枪声模拟器
  • python 与 neo4j 交互(py2neo 使用)
  • Python基础笔记11
  • vulhub中Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
  • 智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套
  • 大模型爆款应用fabric_构建优雅的提示
  • js 对象属性描述符详解
  • 文件操作QFile