Java项目多版本部署及快速回滚(含完整命令)
1. 场景描述
java项目linux环境下快速部署,以前介绍过,今天主要结合linux的软连接,实现版本的快速切换(回滚),包含完整的start.sh与stop.sh,只需修改包名和路径即可运行,有类似需求的朋友可以参考下。
2.解决方案
该方案主要介绍快速部署与版本的快速切换(回滚)。
2.1 创建文件夹
[ruanjianlaowang@t-laowang ~]# mkdir app
[ruanjianlaowang@t-laowang ~]# cd app
[ruanjianlaowang@t-laowang ~]# mkdir ruanjianlaowang
[ruanjianlaowang@t-laowang ~]# cd ruanjianlaowang
[ruanjianlaowang@t-laowang ~]# mkdir bin
[ruanjianlaowang@t-laowang ~]# mkdir conf
[ruanjianlaowang@t-laowang ~]# mkdir log
说明:
(1)在 /app 目录下创建 jar包名称 相同的文件夹,其中包含 文件夹;
(2)bin目录,存放jar包,启动脚本;
(3)conf目录,存放配置文件;
(4)log目录,存放日志文件;
2.2 配置说明
(1)bin目录,jar包使用软连接保存历史版本,便于快速回滚

命令:
--新建软连接
ln -s ruanjianlaowang201912031.jar ruanjianlaowang.jar
--更新软件连接
mv ruanjianlaowang-1.0-SNAPSHOT.jar ruanjianlaowang201912031.jar
ln -snf ruanjianlaowang201912031.jar ruanjianlaowang.jar
---删除软连接
rm -rf ruanjianlaowang.jar
通过软连接的方式,当版本出现问题的时候,就可以直接通过ln -snf来快速回滚到对应的历史版本
(2)conf文件 配置文件使用软连接保存历史版本,便于快速回滚,(1)类似。
(3)log文件夹就不多说了,就是存在log的地方
2.3 sh文件
只需替换路径和包名称即可运行,配置分离的话,可将配置文件放置到conf文件夹下,假如打包已经分离了,也可不放,主要是包的快速回滚与发布。
(1)start.sh
#!/bin/bash
INPUT_1="ruanjianlaowang"
APP_BASE=/home/laowang/app/$INPUT_1/
APP=${APP_BASE}bin/${INPUT_1}.jar
LOG_DIR=${APP_BASE}log/
cd $APP_BASE
if ! [ -e $LOG_DIR ]; then
mkdir $LOG_DIR
fi
if ! [ -e $APP ]; then
echo "failed, $INPUT_1 not exit"
exit
fi
PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
if [ -n "$PROC_ID" ]; then
echo "$INPUT_1 pid ${PROC_ID} still running now , please shutdown it first!"
exit 2
fi
PROP_CONFIG="${APP_BASE}conf/application"
if [ -e ${PROP_CONFIG}.properties ]; then
PROP_CONFIG=file:${PROP_CONFIG}.properties
nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &
elif [ -e ${PROP_CONFIG}.yml ]; then
PROP_CONFIG=file:${PROP_CONFIG}.yml
nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &
else
PROP_CONFIG=
nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &
fi
cd -
if ! [ -n ${PROP_CONFIG} ]; then
echo "warn!!!!, use propertis file : ${PROP_CONFIG}"
fi
if [ "$?" = "0" ]; then
echo "$0 ${1%/} start succeed"
else
echo "$0 ${1%/} start failed"
fi
tail -f ${LOG_DIR}catalina.out
(2)stop.sh
#!/bin/bash
INPUT_1="ruanjianlaowang"
APP_BASE=/home/laowang/app/$INPUT_1/
APP=${APP_BASE}bin/${INPUT_1}.jar
LOG_OUT=${APP_BASE}log/catalina
echo $APP
if ! [ -e $APP ]
then
echo "failed, $INPUT_1 not exit"
exit 1
fi
PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
if [ -n "$PROC_ID" ]
then
kill $PROC_ID
else
echo "$INPUT_1 instance not found !"
exit
fi
for i in {1..10}; do
PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
if [ -n "$PROC_ID" ]; then
if [ "$i" = "1" ]; then
echo -n "trying stop (${PROC_ID}): $i"
else
echo -n -e "\b$i"
fi
sleep 1
else
echo -e "\n $APP was killed($i)"
exit;
fi
done;
kill -9 "$PROC_ID"
echo "$APP was force killed"
(3)restart.sh
#!/bin/bash
./stop.sh
./start.sh
I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!
Java项目多版本部署及快速回滚(含完整命令)的更多相关文章
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- MySQL误操作后如何快速回滚(转)
本文转自http://www.cnblogs.com/dfcao/p/6147970.html#undefined 感谢作者 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,My ...
- Java项目使用 Tomcat 部署 Linux 服务器
一.安装 Java 环境 1 下载 jdk 8 yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 设置 centos7 环境变量 v ...
- java项目创建和部署
http://www.cnblogs.com/nexiyi/archive/2012/12/28/2837560.html http://dead-knight.iteye.com/blog/1841 ...
- Jenkins实现生产环境部署文件的回滚操作(Windows)
由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...
- Git 初始化项目、创建合并分支、回滚等常用方法总结
就在刚才查看资料时候, 看见一句话, 写的特别好: 当我的才华撑不起我的梦想的时候, 应该安静下来学习 配上我最喜欢动漫的一个角色: 红莲 1. Git 初始化项目 1). 创建新的知识库 echo ...
- 自动化部署-Jenkins备份回滚
1.备份 备份可以使用批处理命令解决,实际就是复制当前发布文件 ::备份文件夹名,使用当前时间 set foldername=%date:~0,4%%date:~5,2%%date:~8,2%%tim ...
- 基于ceph快照快速回滚openstack上的虚拟机
查看虚拟机ID 1 2 [root@node1 ~]# nova list --all | grep wyl | dc828fed-1c4f-4e5d-ae84-795a0e71eecc | wyl ...
- JAVA项目JDK版本修改
1.添加JDK window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties
随机推荐
- Java 生成在线二维码 以Base64返回前端、或者写入到本地磁盘
思路 现阶段遇到这样一个问题,在原有的产品上加入线下优惠券模式,用户领取优惠券以后,获取到一个唯一的ID作为领取凭证,但是在线下用扫码枪进行扫码的时候,总不能让人手动输入吧 于是乎就想出了一个办法,后 ...
- MONGODB-LINUX 安装步骤
1.MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb.com/download-center#communi ...
- regexp盲注的一些改进
index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli&qu ...
- SROP的一个实例
以前一直只是大概看过这种技术,没实践过,今天刚好遇到一道题,实践了一波,确实很方便 unmoxiao@cat ~/s/pd_ubuntu> r2 -A smallest 00:54:15 War ...
- CSPS模拟 67
炸分炸的厉害.(当然这跟b哥定律无关 话说好久没人嘲笑我菜了,快飘的不知道到哪了. 谁能讽我两句我不要面子的. 另外在博客上写些没用的东西好浪费精力啊我又不想当网红 主要是考试的时候心态不稳. 以为T ...
- CSPS模拟 62
婚礼现场系列 T1 $gragh$ 为了方便把边的贡献下放到点,跑一个生成树作为划分依据. T2 $permutation$ 由于在本题中,构造的变换方法保证只能邻项交换 所以如果位置串字典序变小,权 ...
- JS中获取元素属性的逆天大法
给大家聊下js中获取元素属性的逆天大法,胆小慎入,切记切记!!! innerHTML.outerHTML.innerText .outerText.value.text().html(),val() ...
- 从0开始编写webpack插件
1. 前言 插件(plugins)是webpack中的一等功臣.正是由于有了诸多插件的存在,才使得webpack无所不能.在webpack源码中也是使用了大量的内部插件,插件要是用的好,可以让你的工作 ...
- python_day2(列表,元组,字典,字符串)
1.bytes数据类型 msg = '我爱北京天安门' print(msg.encode(encoding="utf-8")) print(msg.encode(encoding= ...
- drf
跨域同源 django做跨域同源 需要把csrf去掉 跨站请求伪造 同源 同源机制:域名.协议.端口号相同的同源 简单请求 不写头部请求 跨域会拦截报错缺少请求信息 (1) 请求方法是以下三种方法之一 ...