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. Mybatis JdbcType与Oracle、MySql 数据类型对应关系

    MyBatis 包含的jdbcType类型 ------------------------------------------------------------------------------ ...

  2. .net调用阿里短信接口

    一.创建一个空的api项目 二.应用阿里的短信包 aliyun-net-sdk-core 三.登录阿里添加签名和模板 四.创建创建AccessKey 注意 AccessKey创建后,无法再通过控制台查 ...

  3. Java基本数据类型的传值

    传递值: 说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) ...

  4. 程序员学点xx 之 Redis

    程序员学点xx 之 Redis 概述 其实程序员也要和操作系统打交道, 比如最常见的,部署自己电脑上的开发环境. 当然有时某些牛人, 觉得运维或基础部门的同事不够给力, 亲自上手部署服务器或线上环境, ...

  5. git上传项目到github远程库

    最近在学习使用 git 上传管理项目,依照教程,建好了一个远程库,也实现了本地库与远程库的项目同步上传,但是在试着将本地库里的项目上传到另一个新建远程库时遇到了问题,一直上传不成功,经过一番查找摸索终 ...

  6. Net Core Identity 身份验证:注册、登录和注销 (简单示例)

    一.前言 一般我们自己的系统都会用自己设置的一套身份验证授权的代码,这次用net core的identity来完成简单的注册.登录和注销. 二.数据库 首先就是创建上下文,我这里简单的建了Users和 ...

  7. Spring-Mybatis-SpringMVC三大框架整合

    我们直接切人正题,不多逼逼赖赖 第一步:依赖,一下的这些基本上是SSM整合的全部依赖 <!-- https://mvnrepository.com/artifact/org.springfram ...

  8. Linux软件包管理和磁盘管理实践

    一.自建yum仓库,分别为网络源和本地源 本地yum仓库的搭建就是以下三个步骤: 创建仓库目录结构 上传相应的包到目录下,或者直接挂载光盘也行,如果挂载光盘,第三步就可以省略,因为光盘默认里有repo ...

  9. Linux之ant安装部署

    接下来呢,就开始ant的部署,具体分为如下几个步骤: 1. 获取介质: 在apache的官网中直接下载,下载地址为:http://ant.apache.org/ 下载需要的版本即可: 2. 复制到us ...

  10. ReentrantLock 如何实现非公平锁?和公平锁实现有什么区别

    reentrant 英[riːˈɛntrənt] 美[ˌriˈɛntrənt] 先学会读.单词原意是可重入的 考察显示锁的使用.可延伸知识点 独占锁 & 共享锁 独占锁 - 悲观锁(不能同时被 ...