精华内容
下载资源
问答
  • 当遇到老旧项目,不适合全量更新的时候,可以用一下方法,进行简单快速的增量更新。 首先将修改过的代码上传到svn 查看svn历史,将刚刚上传的文件记录拷贝到一个txt文件里,如下图: 把该txt文本放到项目的根目录下...

    当遇到老旧项目,不适合全量更新的时候,可以用一下方法,进行简单快速的增量更新。

    1. 首先将修改过的代码上传到svn
    2. 查看svn历史,将刚刚上传的文件记录拷贝到一个txt文件里,如下图:
      svn上传记录
      txt内容
    3. 把该txt文本放到项目的根目录下,即和src目录同级(我项目的是eclipse目录结构,如果idea目录结构的话,原理一样),将txt里文件的路径修改为当前目录要替换文件的实际目录,然后将后缀名.java替换成.class(建议使用文本编辑一键替换工具),
      编辑后的txt文件:替换后的txt
    4. 将txt保存后,在当前txt存放的目录下敲cmd命令。输入命令 jar -cvf 生成jar @目标文件txt
      在这里插入图片描述
    5. 回车后显示如下就界面,在这里插入图片描述
    6. 仔细检查有没有打包失败的文件,如果有到txt里检查文件路径是否正确,如果都显示输入、输出等信息,证明打包成功,成功后会在当前路径生成一个jar包,如下图:
      成功后会在当前路径生成一个jar包
    7. 将jar双击打开(前提有解压软件),发现jar里webRoot文件夹里已经将自己要部署的class文件都打包好了(不放心的同学可以再检查一下,用反编译工具编译一下是否是最新的代码),
    8. 将webRoot文件整体拷贝出来,重命名为ROOT(如果生产服务器的webapp下不是ROOT,就以实际名称为准)。
    9. 提前备份生产服务器上的代码,将重命名后的文件整体拖到生产服务器的webapp下,系统提示是否替换点击是就ok了。
      10.抽查一个替换过的文件,反编译后检查代码是否替换成功,如果没问题就大功告成!
    展开全文
  • Jenkins增量更新部署

    2018-11-03 09:25:13
    Jenkins增量打包配置,可以实现增量部署,只更新变动的文件!
  • 部署更新的时候,先将eclipse工程打包成war包,在服务器上删除原先整个目录,使用bin/start.sh,解压war包,启动服务。 在这个过程中,webContent里面的内容会复制到webapps目录下对应的工程文件夹。 矛盾的地方...

    最近遇到2个问题蛮纠结,经蔡老师指点,顺利解决了。^_^

     

    tomcat部署过程

    部署更新的时候,先将eclipse工程打包成war包,在服务器上删除原先整个目录,使用bin/start.sh,解压war包,启动服务。

    在这个过程中,webContent里面的内容会复制到webapps目录下对应的工程文件夹。

     

    矛盾的地方

    有时候webContent里面的文件很多,有几个GB,如果直接复制,需要很长时间。

     

    解决办法:linux软连接

    Linux环境下,可以使用软连接的方式来解决这个问题,将webapps目录中的子文件夹,配置软连接到源目录,这样就省的每次war 包解压以后重新复制内容了。软连接,其实就类似Windows下的快捷方式。

     

    具体过程:

    1,配置tomcat支持软连接

    tomcat默认是禁止软链接的,不过可以设置,也就是一句话。

    eclipse里打开Servers文件夹,选择context.xml 文件,在Context 里加上属性: allowLinking="true" 

    <Context  allowLinking="true" > </Context>

    如图所示:

     

    2,设置软连接路径

    //命令格式
    ln  -s  [源文件或目录]  [目标文件或目录]
     
    //当前路径创建test 引向/var/www/test 文件夹 
    ln –s  /var/www/test  test
    
    
    attachment -> /mnt/disk2/OAFiles/attachment
    document -> /mnt/disk2/OAFiles/document
    unknown -> /mnt/disk2/OAFiles/unknown
    
    软连接配置命令
    ln -s /mnt/disk2/OAFiles/attachment ./attachment
    

     

     

    Tomcat增量更新

    只需要更新修改的class文件就好了,其他内容可以不需要更新。

    Eclipse目录/build目录,选择对应的.class文件,在部署目录下,替换对应的文件,然后重启一下即可。下次程序执行的时候,就会使用新的class文件。

    有时候可以直接使用,有时候需要重启一下,还是重启一下保险。

     

     

     

    参考链接:

    tomcat访问webapp下面工程的文件含有软连接

    https://blog.csdn.net/levisk/article/details/81450511

     

    Linux系统硬链接和软链接

    https://www.cnblogs.com/songgj/p/9115954.html

     

    linux 软连接的使用

    https://www.cnblogs.com/sueyyyy/p/10985443.html

     

    tomcat替换class后不生效

    https://blog.csdn.net/lyd135364/article/details/89218908

     

    tomcat替换.class文件并没有生效的原因(失效原因)(转)

    https://www.cnblogs.com/jpfss/p/7274178.html

     

    展开全文
  • Tomcat实现热部署

    2021-01-10 06:50:48
    每次打增量包的时候就不用重新启动tomcat了 实现方式 在tomcat\conf\server.xml中的<host></host>内部添加标签 <!-- 实现tomcat部署和自定义ContextPath--> docBase: webapps下的你项目的包名 path:...
  • 线上JAVA 在Tomcat里面增量部署

    千次阅读 2016-10-20 14:36:37
    一共需要三个步骤 移走ROOT.war 备份ROOT目录 替换class文件

    一共需要四个步骤

    • 移走ROOT.war
    • 备份ROOT目录
    • 替换class文件
    • 重启
    展开全文
  • 更新war包时,不停tomcat服务器,直接更换war包的话,导致tomcat检测到有新的war自动更新项目,因为项目里有新建的软连接,而新上传的war里是没有软链接的,tomcat自动更新项目时,会删除软连接。除了删除软连接外...
  • 被广泛应用做为java程序的容器使用,很多线上的环境都是从入口的nginx服务器负载均衡到后端多个tomcat服务器组成的集群,因此每次app应用升级的时候,都需要在集群上的每台服务器进行重复的更新工作,下面是关于同步...

    Tomcat作为一个轻量级的应用服务器,被广泛应用做为java程序的容器使用,很多线上的环境都是从入口的nginx服务器负载均衡到后端多个tomcat服务器组成的集群,因此每次app应用升级的时候,都需要在集群上的每台服务器进行重复的更新工作,下面是关于同步升级的两个思路

    方法一、使用rsync远程数据同步服务

    原理:该服务可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送

    限制:采用rsync比较适合增量备份模式,比如每次只修改app项目下的配置文件,rsync第一次同步是将项目目录整体拷贝,以后进行增量同步,但实际生产中很多时候都是将项目目录进行整体打包替换掉,文件变动较大,因此该方法保留使用

    方法二、利用SHELL脚本的同步服务

    思路:既然每次项目目录都有变动,那么就在集群中选择一台服务器作为Master主机,其余机器作为minion从机,每次升级时候在Master上更新,然后利用脚本自动打包目录并推送到minion主机上

    为了方便检查和分开测试这里将文件分开为5个

    1、minion_ip_list.txt #集群minion主机IP文件,每行输入一个有效的minion主机IP,脚本会逐行读取该文件并执行相应命令

    2、master_bak.sh #master主机项目备份脚本,项目部署成功后将项目目录打包,并运行下一步检测脚本

    #!/bin/bash

    ######定义全局变量#################################################################################

    #脚本位置目录

    SCRIPT_DIR=/script

    #备份存档目录

    APP_BAK_DIR=/app_itsm_backup

    #APP应用安装目录

    APP_INSTALL_DIR=/usr/local/tomcat/webapps/web/ServiceHot

    #minionIP列表文件位置

    MINION_LIST=/script/minion_ip_list.txt

    #集群miniom升级脚本文件

    MINION_UPDATE_FILENAME=minion_update.sh

    #当天备份文件名

    APP_BAK_FILENAME=ServiceHot$(date +%Y%m%d).tar.gz

    ###################################################################################################

    ##############检查备份目录函数#####################################################################

    function check_app_bak_dir()

    {

    if [ ! -d $APP_BAK_DIR ];then

    mkdir $APP_BAK_DIR

    echo "Create directory ‘$APP_BAK_DIR’"

    else

    echo "Cannot create directory ‘$APP_BAK_DIR’: File exists"

    fi

    }

    ###################################################################################################

    ##############检查存档函数#########################################################################

    function check_archive()

    {

    if [ ! -f $APP_BAK_DIR/$APP_BAK_FILENAME ];then

    echo "Create Archive ‘$APP_BAK_DIR/$APP_BAK_FILENAME’"

    cd /usr/local/tomcat/webapps/web

    tar -czvf $APP_BAK_DIR/$APP_BAK_FILENAME ServiceHot

    echo "Create archive successfully"

    else

    read -p "Would you need to overlay archive(y/n)?:" i

    #echo $i

    if [ $i = y ];then

    rm -rf $APP_BAK_DIR/$APP_BAK_FILENAME

    cd /usr/local/tomcat/webapps/web

    tar -czvf $APP_BAK_DIR/$APP_BAK_FILENAME ServiceHot

    echo "Successfully overwrite Archive"

    elif [ $i = n ];then

    echo "Thanks to use,See you next time. Bye!"

    exit

    else

    echo "You need enter y or n, Try to run script again!"

    exit

    fi

    fi

    }

    ###################################################################################################

    check_app_bak_dir

    check_archive

    /script/minion_check.sh

    3、minion_check.sh #检测minion主机并将升级脚本minion_update.sh推送到目标主机自动执行

    备注:该脚本涉及的while read line中ssh命令的远程调用问题在下一篇文章中有解释

    #!/bin/bash

    ###################################################################################################

    #脚本位置目录

    SCRIPT_DIR=/script

    #集群miniom升级脚本文件

    MINION_UPDATE_FILENAME=minion_update.sh

    #minionIP列表文件位置

    MINION_LIST=/script/minion_ip_list.txt

    ###################################################################################################

    ###############读取集群minionIP并测试是否存活######################################################

    while read line

    do

    if test -z $line;then

    continue

    else

    echo "Minion host:"$line

    ping -c 2 $line>/dev/null

    i=$(echo $?)

    #echo $i

    if [ $i -eq 0 ];then

    echo "Push script file to $line"

    ssh -n root@$line "mkdir $SCRIPT_DIR 2&1>/dev/null"

    ssh -n root@$line "rm -rf $SCRIPT_DIR/$MINION_UPDATE_FILENAME"

    scp $SCRIPT_DIR/$MINION_UPDATE_FILENAME root@$line:$SCRIPT_DIR

    ssh -n root@$line "chmod +x $SCRIPT_DIR/*.sh"

    ssh -n root@$line "$SCRIPT_DIR/$MINION_UPDATE_FILENAME"

    else

    echo "Minion host does not find, Check file /script/minion_ip_list.txt"

    fi

    fi

    done < $MINION_LIST

    ###################################################################################################

    4、minion_update.sh #集群minion主机升级脚本,从主机master上拉取项目压缩包后在本机解压并启动

    #!/bin/bash

    ############设置全局变量################################################################################

    #master主机ip

    MASTER_IP=192.168.15.133

    #APP更新数据包存放目录

    APP_BAK_DIR=/app_itsm_backup

    #APP应用安装目录

    APP_INSTALL_DIR=/usr/local/tomcat/webapps/web/ServiceHot

    #当天备份文件名

    APP_BAK_FILENAME=ServiceHot$(date +%Y%m%d).tar.gz

    #tomcat默认端口号8080

    TOMCAT_DEFAULT=8080

    #获取tomcat当前端口号

    TOMCAT_PORT=`ss -nutlp|grep $TOMCAT_DEFAULT|grep java|awk '{print $5}'|awk -F ":" '{print $4}'`

    #tomcat安装目录

    TOMCAT_INSTALL_DIR=/usr/local/tomcat

    #获取tomcat当前进程号

    TOMCAT_PID=`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`

    ########################################################################################################

    ########检查更新目录后拉取更新数据包####################################################################

    function check_app_update_dir()

    {

    if [ ! -d $APP_BAK_DIR ];then

    mkdir $APP_BAK_DIR

    echo "Create directory ‘$APP_BAK_DIR’"

    else

    echo "Cannot create directory ‘$APP_BAK_DIR’: File exists"

    fi

    }

    function check_archive()

    {

    rm -rf $APP_BAK_DIR/$APP_BAK_FILENAME

    echo "Pull the archive from master $MASTER_IP....."

    scp root@$MASTER_IP:$APP_BAK_DIR/$APP_BAK_FILENAME $APP_BAK_DIR

    }

    check_app_update_dir

    check_archive

    ########################################################################################################

    ########关闭tomcat函数###################################################################################

    kill -9 $TOMCAT_PID &>/dev/null

    #########################################################################################################

    ##########更新app项目####################################################################################

    function update_app()

    {

    rm -rf $APP_INSTALL_DIR

    tar -xvf $APP_BAK_DIR/$APP_BAK_FILENAME -C /usr/local/tomcat/webapps/web/

    }

    update_app

    ########################################################################################################

    ########重启tomcat#######################################################################################

    $TOMCAT_INSTALL_DIR/bin/catalina.sh start

    ########################################################################################################

    集群升级:

    --在master上升级app项目

    --传5个脚本文件到对应目录并授予执行权限

    命令:chmod +x /script/*.sh

    --在minion_ip_list.txt文件里输入所有minon主机的IP,每行一个

    --运行备份脚本 master_bak.sh

    命令:/script/master_bak.sh

    5、tomcat_check.sh #tomcat端口检查脚本,自动开启tomcat进程,手动选择关闭和重启动tomcat进程,选择是否查看启动日志,该脚本为辅助工具,可自由选择是否使用

    #!/bin/bash

    #################端口号自定义,全局变量################################################################

    #tomcat默认端口号8080

    TOMCAT_DEFAULT=8080

    #获取tomcat当前端口号

    TOMCAT_PORT=`ss -nutlp|grep $TOMCAT_DEFAULT|grep java|awk '{print $5}'|awk -F ":" '{print $4}'`

    #tomcat安装目录

    TOMCAT_INSTALL_DIR=/usr/local/tomcat

    #获取tomcat当前进程号

    TOMCAT_PID=`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`

    ######################################################################################################

    ######查看实时启动日志函数############################################################################

    function read_start_logs()

    {

    read -p "Would you need to check start logs (y or n)?:" i

    if [[ $i = y ]];then

    tail -f $TOMCAT_INSTALL_DIR/logs/catalina.out

    elif [[ $i = n ]];then

    echo "Thanks to use,See you next time. Bye!"

    else

    echo "You need enter y or n"

    echo "Or you can use commond: tail -f $TOMCAT_INSTALL_DIR/logs/catalina.out"

    fi

    }

    ######################################################################################################

    #####tomcat启动管理函数###############################################################################

    if [[ $TOMCAT_PORT -eq 8080 ]];then

    echo "Tomcat is already start !"

    echo "Tomcat process is: $TOMCAT_PID"

    read -p "Would you need to restart or stop tomcat (y=restart/n=stop)?:" i

    if [[ $i = y ]];then

    #echo $TOMCAT_PID

    #ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'

    echo "Kill tomcat process $TOMCAT_PID"

    kill -9 $TOMCAT_PID

    echo "Restart tomcat now!"

    $TOMCAT_INSTALL_DIR/bin/catalina.sh start

    echo "New tomcat process is:`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`"

    read_start_logs

    elif [[ $i = n ]];then

    echo "Kill tomcat process $TOMCAT_PID"

    kill -9 $TOMCAT_PID

    echo "Thanks to use,See you next time. Bye!"

    exit

    else

    echo "You need enter y or n, Try to run script again!"

    exit

    fi

    else

    echo "Start tomcat..."

    $TOMCAT_INSTALL_DIR/bin/catalina.sh start

    echo "New tomcat process is:`ps -ef|grep tomcat|grep -v grep|grep -v script|awk '{print $2}'`"

    read_start_logs

    fi

    ##########################################################################################################

    展开全文
  • 这样既能快速的更新代码,又不用担心Tomcat重启session过期的问题,如同更新jsp一般的方便,当然IDEA里面的热更新还是没有更新jsp那么方便,具体限制本文后面有提(只是我目前了解到的限制)。如果说本地更新还算快捷...
  • 本工具提供快速提取项目文件,适用于增量部署的javaweb项目
  • projectname是要部署的项目,SSH_Server是项目运行所在的服务器,GitBranch为分支,from_commitid为远程git仓库项目代码提交id的起始版本,to_commitid为截止版本,如下图,如果要等到红框提交版本的增量部署,那么...
  • 由于每次支队增量进行更新,避免全部代码的泄露 1.1.4 增量部署缺点 增量部署 若存在其他外在部署环境依赖,则降低部署效率 增量部署不像 部署环境多的情况下,对可重复性要求高 增量部署对回滚操作变得不友好 1.2 ...
  • Spring Boot的几个注解意义及添加热部署(增量更新) 几个注解的意义 这里的所有的注解,除了@SpringBootApplication这个注解以外,都来于spring或者spring mvc @RestController: 包含两个功能@Controller和@...
  • 然后说说纯文本JAVA WEB开发,有这么几种类型: 1、纯文本只有JSP 如果项目中只有jsp页面,就很稀松平常了,你只需要在tomcat的webapps下新建一个目录,然后在里面新建.jsp文件,就可以通过类似于 ...
  • 这是个前后端不分离的项目,增量部署需要替换掉class部分和页面部分。 1. 更新代码 更新最新代码,编译好,本地看能否正常启动 2. 打包 打包class文件和页面文件,视不同的项目打包的文件夹不同,主要看日常是否会...
  • jenkins增量更新步骤:(以creditsys_service_tomcat为例) 1.SecureCRT 或者Xshell 连接服务器192.168.*.*,账号:test/**** 2.cd tomcat/creditsys_service_tomcat/webpps ,将含路径文件的zip包用FX导入此路径,...
  • SpringBoot使用增量部署

    千次阅读 2020-03-16 22:12:04
    内置的tomcat,灵活的配置等等,但是,由于他使用jar包部署的话,也会达成一个很大的jar包,一旦上线,上传就特别耗时了,而且还有一个问题就是,如果生产环境同时有多人更新,也会造成冲突(虽然可能性很少),但是...
  • win10部署tomcat+jenkins

    2019-07-05 22:43:10
    step 1 官网下载tomcat ,以下选择64位系统安装包 https://tomcat.apache.org/download-90.cgi step 2: 直接解压安装包到指定路径,然后配置环境...如以上界面出现中文乱码,则修改tomcat 目录下的conf目录...
  • Maven tomcat7热部署

    2018-11-12 15:05:56
    增量发布,把修改过得那些文件手动上传至Tomcat,*.class *.xml 等等,这样的缺点非常大,需要断开Tomcat,记住那些你修改过得文件,很繁琐 Tomcat控制台GUI热部署,就是每次打完war包,手动上传到Tomcat,这样不...
  • Linux上使用tomcat部署java项目

    千次阅读 2019-12-31 14:27:48
    很多程序员一般使用一些编程软件,如Idea,Eclipse等,这些软件集成了tomcat功能,只需要简单的操作就可以部署,所以程序员一般不考虑如何部署java项目。但是作为一个运维人员,我们必须让java项目跑在服务器上,...
  • Tomcat部署多个war包

    千次阅读 2020-04-09 12:48:21
    安装了JDK1.8-u181(其实安装JRE足够了,但我手头有JDK的安装包,何必再下)和Tomcat8.5.53。 安装好以后环境变量里配置了JAVA_HOME,Path。配的是JRE,没有配JDK。 要发布两个war包,MES和ERP。 2 安装Tomcat 我用...
  • war包的增量打包方法

    千次阅读 2018-05-10 09:56:58
    关键指令:jar -tvf ciis.war(显示war包所有文件路径) jar -xvf ciis.war(解压war包) jar -uvf0 ciis.war(压缩war包)环境:win10 64位1、打开指令操作框,进入war包所在路径,执行jar -tvf ciis.war,效果如下...
  • 做这个之前你首先要保证你的远程Tomcat支持热部署,还有可以通过管理员登录,关于这个内容,可以参考我的博客。 在你当前的工程下面进入DOS命令状态 输入如下命令 表示成功 这样你就可以远程热部署你的项目了 对...
  • 3. git-package_.sh 脚本如下(需要根据自身的 Tomcat 项目部署路径修改变量 web_dir 注意路径最后不要有 “/” ): #!/bin/bash #首先获取待打包文件 git log --pretty=format:"" -$1 --name-only git
  • idea项目实现tomcat容器热部署

    千次阅读 2018-03-08 22:00:33
    这个是老早以前就会的一个操作技巧,但是...假设,项目部署tomcat上(idea怎么把项目部署tomcat上,这个请另外自行百度哈),那么只要做一件事:1、经过下图四个步骤选择:druid:war exploded2、更新如下两个选...
  • 开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应该规范说法,称Tomcat为一个JavaWeb服务器,而不是JavaEE服务器我们使用IDE部署JavaWeb项目...
  • tomcat部署时项目文件夹消失

    千次阅读 2019-07-02 11:07:29
    然后让他们赶紧把最新的war包扔上去,他们又怎么都部署不好,只好又把修改的文件发给我我重新打包再部署,导致一汽线上数据不能显示差不多半小时。文件夹消失的主要原因在于我把war包删除了,总...
  • eclipse中,tomcat项目默认是部署在eclipse的worksapce文件夹中的\.metadata\.plugins\org.eclipse.wst.server.core目录下,这种默认配置可能会导致项目明明成功部署发布启动而页面却报404的错误。 解决方案: 一...
  • 上周学习了Springboot项目通过打war包方式部署在tomcat中,后续迭代通过添加class文件实现增量部署。 下载Springboot项目 通过阿里云https://start.aliyun.com生成一个简单Springboot项目,选择war包打包方式,并...
  • 最近在maven多模块项目调试中,当我只想让eclipse的server启动的同时不想要项目被自动部署,虽然在overview...这两个地方都设置了,但是启动tomcat时,项目还是被自动部署了。查找了其它相关资料,发现有更为详细的配置
  • 最近有svn版本管理工具切换到git,自动化部署需要修改为从git拉取代码,下面是修改的步骤: 首先展示一下构建页面的效果: 看完构建页面的效果了,下面来看配置: 1、参数设置(包含projectname参数关联type...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,157
精华内容 2,862
关键字:

tomcat增量更新部署