精华内容
下载资源
问答
  • 当遇到老旧项目,不适合全量更新的时候,可以用一下方法,进行简单快速的增量更新。 首先将修改过的代码上传到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.抽查一个替换过的文件,反编译后检查代码是否替换成功,如果没问题就大功告成!
    展开全文
  • 部署更新的时候,先将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

     

    展开全文
  • SpringBoot使用增量部署

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

    SpringBoot确实方便了我们很多,内置的tomcat,灵活的配置等等,但是,由于他使用jar包部署的话,也会达成一个很大的jar包,一旦上线,上传就特别耗时了,而且还有一个问题就是,如果生产环境同时有多人更新,也会造成冲突(虽然可能性很少),但是如果采取增量式部署,也会减少这个可能性。

    当然上述问题我们也可以使用war包方式,可是,我感觉那个外置的tomcat也很麻烦,还需要配置很多东西,SpringBoot都已经内置了tomcat了,何必还需要使用外置的呢

    所以今天的目标是:SpringBoot增量式部署+使用内置tomcat

    第一步:打包

    我们使用的是maven来管理我们的jar包

    不多说,直接上配置文件

    <build>
            <finalName>umf-wechat-core</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>8</source><!-- 源代码使用的JDK版本 -->
                        <target>8</target><!-- 需要生成的目标class文件的编译版本 -->
                        <encoding>UTF-8</encoding><!-- 字符集编码 -->
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <skipTests>true</skipTests><!--跳过测试-->
                    </configuration>
                </plugin>
    
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <!-- 处理依赖jar包 -->
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <!-- 依赖包输出目录,将来不打进jar包里 -->
                                <outputDirectory>${project.build.directory}/${project.name}/lib</outputDirectory>
                                <excludeTransitive>false</excludeTransitive>
                                <stripVersion>false</stripVersion>
                                <includeScope>runtime</includeScope>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <encoding>UTF-8</encoding>
                                <!--打成jar包后复制到的路径-->
                                <outputDirectory>
                                    ${project.build.directory}/${project.name}/script
                                </outputDirectory>
                                <resources>
                                    <resource>
                                        <!--项目中的路径-->
                                        <directory>script</directory>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                        <!--可配置多个提取复制路径只需要 “<id>”名字不一样即可-->
                        <execution>
                            <id>copy-bulid</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <encoding>UTF-8</encoding>
                                <outputDirectory>
                                    ${project.build.directory}/${project.name}/bin
                                </outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>${project.build.directory}/classes</directory>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <!-- 排除不想打包-->
                        <excludes>
                            <!--注意从编译结果目录开始算目录结构-->
                            <exclude>/sercurity/testUmpay.key.p8</exclude>
                        </excludes>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>

    上面包括了build的信息,因为我们也只需要这些编译时期的操作,通过这些操作,我们就可以在我们的target目录下有一个项目名的文件夹,这个文件夹里面的东西,就是我们所需要的所有的东西了

    第二步:启动脚本

    启动脚本分为三个文件,三个文件统一在我们的script目录下

    class_path

    para

    core.sh

    class_path:这个文件里面存放了所有我们需要的jar包,由于我们不是使用 java -jar 启动项目,所以我们需要指定我们的lib目录

    para:这个存放了我们所需要的所有常量信息

    core.sh:这个是我们的启动,停止,重启,检查状态等脚本集合

     

    class_path:

    . para
    
    APPCLASSPATH=
    APPCLASSPATH=$APPCLASSPATH:${SERVICE_BIN}
    APPCLASSPATH=$APPCLASSPATH:${SERVICE_LIB}/spring-boot-2.1.10.RELEASE.jar
    APPCLASSPATH=$APPCLASSPATH:${SERVICE_LIB}/spring-boot-autoconfigure-2.1.10.RELEASE.jar
    APPCLASSPATH=$APPCLASSPATH:${SERVICE_LIB}/spring-boot-starter-2.1.10.RELEASE.jar
    #export APPCLASSPATH

    中间省略n多jar包

    para:

    #!/bin/bash
    SERVICE_ID=core
    SERVICE_NAME=core
    SERVICE_DIR=/usr/mpsp/${SERVICE_NAME}
    SERVICE_BIN=${SERVICE_DIR}/bin
    SERVICE_LIB=${SERVICE_DIR}/lib
    SERVICE_LOG=${SERVICE_DIR}/log
    SERVICE_CLASS=com.xxx.xxx
    SERVICE_SPRING_PROFILES_ACTIVE=dev
    
    JAVA_HOME=/usr/local/java/jdk1.8.0_241
    PATH=$JAVA_HOME/bin:$PATH

    其中需要改动的有:SERVICE_ID 和  SERVICE_NAME 修改为你的项目名;SERVICE_CLASS 修改为你的启动类;  JAVA_HOME  这个应该不用说了

    core.sh

    #! /bin/bash
    export LANG=en_US.UTF-8
    clear
    . para
    . class_path
    
    
    #使用说明,用来提示输入参数
    usage() {
        echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
        exit 1
    }
     
    #检查程序是否在运行
    is_exist(){
      pid=`ps -ef|grep $SERVICE_ID|grep -v grep|awk '{print $2}' `
      #如果不存在返回1,存在返回0     
      if [ -z "${pid}" ]; then
       return 1
      else
        return 0
      fi
    }
     
    #启动方法
    start(){
      is_exist
      if [ $? -eq "0" ]; then
        echo "${SERVICE_ID} is already running. pid=${pid} ."
      else
    	cd ${SERVICE_BIN}
        sleep 1
        nohup java -Xms258m -Xmx512m -Dflag=${SERVICE_ID} -Djava.security.policy="policy.txt" -Djava.rmi.server.codebase=file://${SERVICE_BIN}/ -cp ${APPCLASSPATH} ${SERVICE_CLASS} --spring.profiles.active=${SERVICE_SPRING_PROFILES_ACTIVE} >${SERVICE_LOG}/console.out 2>&1 &
    	sleep 1
      fi
      status
      tail -300f ${SERVICE_LOG}/console.out
    }
     
    #停止方法
    stop(){
      is_exist
      if [ $? -eq "0" ]; then
        kill -9 $pid
      else
        echo "${SERVICE_ID} is not running"
      fi 
      status  
    }
     
    #输出运行状态
    status(){
      is_exist
      if [ $? -eq "0" ]; then
        echo "${SERVICE_ID} is running. Pid is ${pid}"
      else
        echo "${SERVICE_ID} is NOT running."
      fi
    }
     
    #重启
    restart(){
      stop
      start
    }
     
    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
      "start")
        start
        ;;
      "stop")
        stop
        ;;
      "status")
        status
        ;;
      "restart")
        restart
        ;;
      *)
        usage
        ;;
    esac
    

    该文件为启动脚本,内容可由各自需求任意更改,名称随意更改

     

    至此 结束!!!!  so easy

     

    途中遇见的坑:

    1.加载不了主类   Error: Could not find or load main class xxx:

    原因:class_path 问题,可能由于编译器问题,导致没有拼接成功,所以导致没有加载好lib,出现这个问题!!!

    2.启动失败,nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sequenceService':

    原因:还是class_path  由于不细心,导致少放了一个jar包,好像是commom-io或者netty的,导致启动失败,对比过后发现问题,修改过后,启动成功。

    展开全文
  • idea项目实现tomcat容器热部署

    千次阅读 2018-03-08 22:00:33
    这个是老早以前就会的一个操作技巧,但是...假设,项目部署tomcat上(idea怎么把项目部署tomcat上,这个请另外自行百度哈),那么只要做一件事:1、经过下图四个步骤选择:druid:war exploded2、更新如下两个选...

    这个是老早以前就会的一个操作技巧,但是今天突然间遇到了,自己没有设定热部署,然后修改了前端代码,一直不生效的情况。

    所以抽空分享下,如何实现前端代码(jsp/html/js/css)修改之后自动加载增量代码。

    假设,项目部署在tomcat上(idea怎么把项目部署到tomcat上,这个请另外自行百度哈),那么只要做一件事:

    1、经过下图四个步骤选择:druid:war exploded


    2、更新如下两个选项内容为如图所示:


    over

    展开全文
  • 版本:solr4.4.0 jdk1.6 tomcat7,端口80661:安装solr 在/opt目录下创建solr文件夹 将tomcat,solr4.4.0上传并解压 进入/opt/solr/solr-4.4.0/dist,找到solr.war 将solr.war文件复制到tomcat的/opt/solr/...
  • 这是个前后端不分离的项目,增量部署需要替换掉class部分和页面部分。 1. 更新代码 更新最新代码,编译好,本地看能否正常启动 2. 打包 打包class文件和页面文件,视不同的项目打包的文件夹不同,主要看日常是否会...
  • 按网上把远程词库文件部署tomcat,每次都要重新加载,当文件数据量大的时候,每分钟加载一次,并不友好,可以通过模拟es的远程文件加载协议,增量更新词库,这样当词库变得很大的时候,可以节约词库加载时间 ...
  • Solr4.* Solr5.* 增量更新

    2019-09-18 02:22:54
    前提: a、基于Solr 4.10.3的Solr-cloud,部署在linux操作系统,Tomcat 8容器中; b、在使用solr,对solr有了解。...最近在做一个基于Solr的全文检索的功能,在实现增量更新的时候碰到了一些问题,总结下来...
  • 搜索引擎检索数据样例实现#搜索引擎#solr开源搜索引擎标识1、SOLR安装部署一、原始solr服务部署1)、前往官网下载最新版本solr文件2)、下载tomcat8.5.33以上版本(防止被扫描到历史漏洞)3)、在tomcat webapp目录下创建...
  • 增量打包

    2018-07-13 09:28:23
    查看需要更新的日志选中要更新的提交记录,ctrl+c,复制复制出来就是这样,有所有更改的文件列表数据然后批量替换一下在根目录下打包,执行命令jar cvf webapps.jar @list.txt,打包的文件对应tomcat部署目录结构.....
  • Jekins环境部署

    2015-09-28 14:29:51
    1.Jenkins的安装与部署   2.Jenkins的主从部署    3.Jenkins远程发包(Tomcat为例)   4.Jenkins增量更新
  • SpringBoot之瘦身部署

    2021-03-08 17:06:58
    目录: 1.前言 2.瘦身前的Jar包 3.解决方案 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在...Tomcat部署Web工程的时候,可以进行增量更新,SpringBoot也是可以的~ SpringBoot编译出来的Jar包中,磁盘占用
  • 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼: 编译出来的 ...Tomcat部署Web工程的时候,可以进行增量更新,Sprin...
  • 答:快速部署这些增量文件到tomcat的webapps文件夹对应的项目中。进行增量部署。 问题2: 打包的工具是什么? 答:用svn插件,百度一下MyEclipse如果安装SVN插件。自己装好继续下一步。 流程如下: 1、前提存在一个...
  • 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼: 编译出来的 Jar ...Tomcat部署Web工程的时候,可以进行增量更新,S...
  • 一、前言SpringBoot部署起来虽然简单,如果服务器部署在公司...这个时候如果想要对线上运行工程有一些微调,则非常痛苦二、瘦身前的Jar包Tomcat部署Web工程的时候,可以进行增量更新,SpringBoot也是可以的~Sp...
  • 目录: 1.前言2.瘦身前的Jar包3.解决方案 一、前言 Spring Boot部署起来虽然简单,...Tomcat部署Web工程的时候,可以进行增量更新,Spring Boot也是可以的~ Spring Boot编译出来的Jar包中,磁盘占用大的,是一些外
  • 一、前言Spring Boot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,部署起来实在...二、瘦身前的Jar包Tomcat部署Web工程的时候,可以进行增量更新,Spring Boot也是可以的~Spri...
  • SpringBoot 打包瘦身

    2019-09-27 00:54:51
    一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼: 编译出来的 ...Tomcat部署Web工程的时候,可以进行增量更新,Sprin...
  • 目录前言瘦身前的Jar包解决方案一、前言SpringBoot部署起来虽然简单,如果服务器部署在...这个时候如果想要对线上运行工程有一些微调,则非常痛苦二、瘦身前的Jar包Tomcat部署Web工程的时候,可以进行增量更新,Sp...
  • 目录 前言 瘦身前的Jar包 ...SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),...Tomcat部署Web工程的时候,可以进行增量更新,SpringBoot...
  • 目录:1.前言2.瘦身前的Jar包3.解决方案一、前言Spring Boot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,...二、瘦身前的Jar包Tomcat部署Web工程的时候,可以进行增量更新,Spr...
  • 目录:1.前言2.瘦身前的Jar包3.解决方案一、前言Spring Boot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网,...二、瘦身前的Jar包Tomcat部署Web工程的时候,可以进行增量更新,Spr...
  • 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译...Tomcat部署Web工程的时候,可以进行增量更新,SpringBoot...
  • 1、问题说明 SpringBoot 部署起来虽然简单,如果服务器部署在公司...Tomcat部署 Web 工程的时候,可以进行增量更新,SpringBoot 也是可以的~ SpringBoot 编译出来的 Jar 包中,磁盘占用大的,是一些外部依赖库
  • 有一个项目部署在客户那边,由于一直以来,都是采用增量更新的方式,最近新加了一些需求,给客户增量包后,客户解压增量包后,启动tomcat报错(增量包中不含jar文件信息),于是开始到网上开始查找问题,google一番...
  • SpringBoot项目打包瘦身

    2020-05-09 10:28:46
    本文转自Java程序员社区微信公众号 一、前言 SpringBoot部署起来虽然简单,如果服务器部署在...Tomcat部署Web工程的时候,可以进行增量更新,SpringBoot也是可以的~ SpringBoot编译出来的Jar包中,磁盘占用大..

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

tomcat增量更新部署