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项目多版本部署及快速回滚(含完整命令)的更多相关文章

  1. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  2. MySQL误操作后如何快速回滚(转)

    本文转自http://www.cnblogs.com/dfcao/p/6147970.html#undefined 感谢作者 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,My ...

  3. Java项目使用 Tomcat 部署 Linux 服务器

    一.安装 Java 环境 1 下载 jdk 8 yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 设置 centos7 环境变量 v ...

  4. java项目创建和部署

    http://www.cnblogs.com/nexiyi/archive/2012/12/28/2837560.html http://dead-knight.iteye.com/blog/1841 ...

  5. Jenkins实现生产环境部署文件的回滚操作(Windows)

    由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...

  6. Git 初始化项目、创建合并分支、回滚等常用方法总结

    就在刚才查看资料时候, 看见一句话, 写的特别好: 当我的才华撑不起我的梦想的时候, 应该安静下来学习 配上我最喜欢动漫的一个角色: 红莲 1. Git 初始化项目 1). 创建新的知识库 echo ...

  7. 自动化部署-Jenkins备份回滚

    1.备份 备份可以使用批处理命令解决,实际就是复制当前发布文件 ::备份文件夹名,使用当前时间 set foldername=%date:~0,4%%date:~5,2%%date:~8,2%%tim ...

  8. 基于ceph快照快速回滚openstack上的虚拟机

    查看虚拟机ID 1 2 [root@node1 ~]# nova list --all | grep wyl | dc828fed-1c4f-4e5d-ae84-795a0e71eecc | wyl ...

  9. JAVA项目JDK版本修改

    1.添加JDK    window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties

随机推荐

  1. Spring Boot实战之定制type Formatters

    本文首发于个人网站:Spring Boot实战之定制type Formatters 前面我们有篇文章介绍了PropertyEditors,是用来将文本类型转换成指定的Java类型,不过,考虑到Prop ...

  2. Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Web 版 VS Code、Azure 账号等

    北京时间 2019 年 11 月 4 日,在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版!发布之后,开发者们都为之振奋.同 ...

  3. JavaScript权威指南----一个JavaScript贷款计算器

    废话不多说上例子代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  4. js 重写a标签的href属性和onclick事件

    适应场景:假如移动端拨打电话,需要给a标签添加href属性,但是由于需求,需要链接跳转的同时给a标签添加onclick事件,如果不做任何处理的话,默认执行点击事件,而不会跳转href属性的链接. 怎么 ...

  5. 【建站03】WordPress网站如何去除RSS功能

    哈喽,大家好,我是帝哥,最近有小伙伴问我,如何去掉WordPress上的RSS功能,这个功能呢,说实话,我们很少会用到. 但是如果有点强迫症的话看着会很不舒服,所以,今天和大家分享一下如何去掉Word ...

  6. NOIP模拟27(命悬一线)

    考得太悬了!

  7. 算法编程题积累(4)——腾讯笔试"有趣的数字“问题

    本题基本思路:先对原序列进行排序,再根据不同情况采用不同算法. 首先差最大的对数最好求:用最小的数的个数 × 最大的数的个数即可. 接着求差最小的对数: 1.当序列中无重复关键字时:可知最小差必然产生 ...

  8. getchar()用法 【转】

    1.从缓冲区读走一个字符,相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符 ...

  9. starUML 3.0.2文件 百度云

    文件百度云---链接:https://pan.baidu.com/s/1BVX9Ze40bkgd3k_4WFb99A 提取码:t7kj 使用方法:将starUML安装目录(一般为 C:\Program ...

  10. ThreadLocal<T> 源码解析

    在activeJDBC框架内部的实现中看到了 ThreadLocal 这个类,记录下了每个线程独有的连接 private static final ThreadLocal<HashMap< ...