SpringBoot启停脚本

由于工作需要,springboot需要脱离原有部署环境,在没有自动部署功能的前提下,为了防止人为误操作以及其他的一些原因,需要规范系统部署,但同时带了人工操作的复杂度,因此需要通过脚本控制来降低人工成本。

目录

1.前期准备

2.系统部署规范

3. 资源利用记录

4.服务启停脚本


1.前期准备

     springboot的前期工作不再赘述,环境搭建不是这里的重点,因此Java环境等等忽略

2.系统部署规范

      既然说要脚本完成启停,必然需要规范系统部署,规则如下

      2.1springboot结构相关
                 /                                                                                                                         --------------根目录

                 /apps                                                                                                                 --------------部署服务目录

                 /apps/xxx-sc(项目名称)                                                                                --------------日志文件目录

                 /apps/xxx-sc(项目名称)/logs                                                                        --------------项目日志目录

                 /apps/xxx-sc(项目名称)/logs/xxx.年月日                                                      --------------项目日志目录    (日志每日一切割,每50M一切割)
                 /apps/xxx-sc(项目名称)/service.sh                                                               --------------项目启停脚本

                 /apps/xxx-sc(项目名称)/service/xxx-sc-aaaa(项目名称-sc-端口号)         --------------项目日志名称                

                 /apps/xxx-sc(项目名称)/tmp                                                                         --------------临时jar                

                 /apps/xxx-sc(项目名称)/target                                                                      --------------target

    2.2数据库相关
                 /                                                                            --------------根目录

                 /apps                                                                    --------------部署服务目录

                /apps/dbconfig                                                    --------------数据库文件目录
                /apps/dbconfig/数据库名字                                --------------数据库文件目录
3. 资源利用记录

       由于同一个服务器可能存在多服务情况,为了防止相互之间端口占用的影响,需要资源备案进行分配

 

项目名称域名框架环境http端口号Shutdown端口AJP端口数据库
xxxxxx.aaa.comspringboot生产8989  xxx
xxx-nc springboot内测8988  xxx-nc
ppp tomcat生产898781878287ppp
ppp-nc tomcat内测898681868286ppp-nc
    8985   

4.服务启停脚本

目录名称目录说明备注
xxx-sc项目所在目录

xxx:项目名称

sc:生产环境

nc:内测环境

xxx-sc-aaaa项目名称aaa:端口号
service.shspringboot项目启停脚本

启动:service.sh start

停止:service.sh stop

重启:service.sh restart

上线:service.sh push

回滚:service.sh rollback

状态查询:service.sh status

   

 

        由于shell脚本不是特别熟悉,有什么更好的方式可以达成目标,欢迎大家指点

#!/bin/sh
## java env
#export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101
#export JRE_HOME=$JAVA_HOME/jre

echo
echo "**********************环境检测 开始**********************"
`java -version`
echo
service_path=`ls -lt ./service/ | find ./service -name "*.jar"`
echo ">>> 服务路径地址: $service_path"
service_name=${service_path##*/}
echo ">>> 服务JAR名称: $service_name"
tmp_path=`ls -lt ./tmp/ | find ./tmp -name "*.jar"`
echo ">>> 临时文件路径: "$tmp_path
tmp_name=${tmp_path##*/}
echo ">>> 临时JAR名称: "$tmp_name
echo "**********************环境检测 结束**********************"
echo 
echo

API_NAME=$service_path
JAR_NAME=$service_name


#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status|push|rollback]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   	echo ">>> 服务 $JAR_NAME 未运行"
   	return 1
  else 
  	echo ">>> 服务 $JAR_NAME 运行中"
    return 0
  
  fi
}

#启动方法
start(){
  echo "**********************启动服务 开始**********************"
  is_exist
  if [ $? -eq "0" ]; then 
    echo ">>> 服务 ${JAR_NAME} 已经在运行中, PID=${pid} <<<" 
  else
    nohup java -jar $service_path >/dev/null 2>&1 &
    getPID
	    if [ $? -eq "0" ]; then
	    	echo ">>> 服务 $JAR_NAME 启动失败 <<<"  
	    else
	    	echo ">>> 服务 $JAR_NAME 启动成功 PID=$! <<<"
	    fi
   fi
   echo "**********************启动服务 完成**********************"
  }

#停止方法
stop(){
	echo "**********************关闭服务 开始**********************"
  is_exist  
	if [ $? -eq "1" ]; then
	  echo ">>> 无服务运行中"
	else
	  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
	  echo ">>> 服务运行中,PID=$pid . 开始关闭服务."
	  kill -9 $pid
	  echo ">>> 服务已停止."
	fi
	echo "**********************关闭服务 完成**********************"
}

#输出运行状态
status(){
	echo "**********************查询服务状态 开始**********************"
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> 服务 ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> 服务 ${JAR_NAME} is not running <<<"
  fi
  echo "**********************查询服务状态 完成**********************"
}

#重启
restart(){
	echo "**********************重启服务 开始**********************"
  stop
  echo
  start
  echo "**********************重启服务 完成**********************"
}

#上线
push(){
	echo "**********************上线服务 开始**********************"
	stop
	echo
	rmJar
	echo
	start
	echo "**********************上线服务 完成**********************"
}

#回滚
rollback(){
	echo "**********************回滚服务 开始**********************"
	stop
	echo
	rollBackJar
	echo
	start
	echo "**********************回滚服务 完成**********************"
}

rmJar() {
	current=`date "+%Y%m%d%H%M%S"`
	jar_new_anme=$JAR_NAME-$current
	
	cp $API_NAME ./target/$jar_new_anme
	echo ">>> 历史服务备份完成,备份文件:"  $jar_new_anme
	
	rm -rf $API_NAME
	echo ">>> 移除运行中文件:" + $API_NAME
	
	cp ./tmp/$tmp_name $API_NAME
	echo ">>> 拷贝最新jar包并加载:" + $tmp_name
	
	rm -rf ./tmp/$tmp_name
	echo ">>> 移除临时jar包:" + $tmp_name
}

rollBackJar() {
	target_jar=`ls -lt ./target/ | grep $JAR_NAME | head -n 1 |awk '{print $9}'`
	
	echo ">>> 获取历史服务备份文件:"  $target_jar
	cp ./target/$target_jar $API_NAME
	echo ">>> 加载历史服务备份文件 $target_jar 回滚为 $API_NAME"
}

getPID() {
	pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
	if [ -z "${pid}" ]; then
   	echo ">>> 服务 $JAR_NAME 未运行"
   	return 1
  else 
  	echo ">>> 服务 $JAR_NAME 运行中"
    return ${pid}
  
  fi
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "push")
  	push
  	;;
  "rollback")
  	rollback
  	;;	
  *)
    usage
    ;;
esac
exit 0

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot 是一个用于开发Java应用的框架,可以方便快捷地构建独立的、生产级别的应用程序。在Windows上,我们可以编写一个启动和停止Spring Boot应用的脚本。 首先,我们需要创建一个批处理文件(后缀名为.bat),用于启动Spring Boot应用。在批处理文件中,我们需要执行Java命令来启动应用程序。例如,我们可以使用以下命令启动Spring Boot应用: ``` @echo off title 启动Spring Boot应用 set JAR_FILE=path/to/your/application.jar java -jar %JAR_FILE% ``` 在上面的示例中,我们首先指定了启动脚本的标题,在命令提示符中会显示该标题。然后,我们设置了一个变量`JAR_FILE`,指定了Spring Boot应用的jar文件的路径。最后,我们使用`java -jar`命令来启动应用。 然后,我们可以创建一个停止脚本来停止Spring Boot应用。停止脚本需要使用Spring Boot Actuator的shutdown端点来停止应用程序。以下是一个示例停止脚本: ``` @echo off title 停止Spring Boot应用 set SHUTDOWN_URL=http://localhost:8080/actuator/shutdown powershell -Command Invoke-WebRequest -Uri %SHUTDOWN_URL% -Method POST ``` 在上面的示例中,我们首先指定了停止脚本的标题。然后,我们设置了一个变量`SHUTDOWN_URL`,指定了Spring Boot应用的Shutdown端点的URL路径。最后,我们使用PowerShell命令`Invoke-WebRequest`来向该URL发送一个POST请求,从而停止应用程序。 通过上述的启动和停止脚本,我们就可以方便地启动和停止Spring Boot应用了。当我们需要启动应用时,只需执行启动脚本即可;当我们需要停止应用时,只需执行停止脚本即可。这样,我们就能更好地管理和控制Spring Boot应用的运行。 ### 回答2: Windows Spring Boot 启停脚本可以使用以下步骤: 1. 打开文本编辑器,创建一个新的批处理文件(.bat)。 2. 在批处理文件中,首先添加设置 Java 环境变量的命令,例如: `set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291` 3. 接下来,使用 `cd` 命令切换到 Spring Boot 项目的目录,例如: `cd C:\path\to\spring-boot-project` 4. 添加启动 Spring Boot 应用程序的命令,例如: `start java -jar YourSpringBootApplication.jar` 5. 如果你的应用程序需要使用其他配置文件或环境变量,你可以使用 `-D` 参数进行指定,例如: `start java -jar YourSpringBootApplication.jar -Dspring.config.location=classpath:/custom.properties` 6. 添加停止 Spring Boot 应用程序的命令,例如: `taskkill /f /im java.exe` 7. 保存批处理文件并退出文本编辑器。 现在,你可以双击运行这个批处理文件来启动和停止你的 Spring Boot 应用程序。另外,你还可以将这个批处理文件添加到 Windows 任务计划程序中,以便在系统启动时自动启动 Spring Boot 应用程序。 需要注意的是,这个启停脚本假设你已经正确地设置了 Java 环境变量,并拥有正确的路径和文件名来启动和停止 Spring Boot 应用程序。请根据你自己的环境和应用程序的要求进行相应的修改。 ### 回答3: Windows Spring Boot启停脚本用于控制Spring Boot应用程序的启动和停止。以下是一个简单的示例脚本: @echo off SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291 SET PATH=%JAVA_HOME%\bin;%PATH% SET JAR_NAME=my-spring-boot-app.jar SET APP_NAME=MySpringBootApplication :start echo Starting %APP_NAME%... java -jar %JAR_NAME% :stop echo Stopping %APP_NAME%... for /f "tokens=5" %%a in ('jcmd ^| find "%JAR_NAME%"') do ( jcmd %%a JVM.mgmt_shutdown ) ping localhost -n 5 > nul SET /A COUNTER+=1 if %COUNTER% LSS 5 ( goto stop ) echo %APP_NAME% did not stop gracefully. Terminating forcefully... for /f "tokens=5" %%a in ('jcmd ^| find "%JAR_NAME%"') do ( jcmd %%a VM.system_exit 0 ) echo %APP_NAME% stopped. 这个脚本中的%JAVA_HOME%变量应根据Java安装的实际路径进行修改。%JAR_NAME%变量是Spring Boot应用程序的JAR文件名,%APP_NAME%是应用程序的名称。 脚本中的:start标签用于启动应用程序。它使用java -jar命令来启动Spring Boot应用程序。 :stop标签用于停止应用程序。它使用jcmd命令来查找正在运行的Java进程,并使用JVM.mgmt_shutdown命令向应用程序发送关闭信号。如果应用程序没有正常关闭,脚本将尝试关闭它五次。 在每次尝试关闭后,脚本会使用ping命令暂停5秒钟。如果应用程序在尝试次数达到五次之前未能正常关闭,脚本将使用VM.system_exit命令强制终止它。 以上是一个简单的Windows Spring Boot启停脚本示例,可以根据具体的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值