`
苟且偷生
  • 浏览: 3735 次
社区版块
存档分类
最新评论

Tomcat中antiResourceLocking、antiJARLocking说明

 
阅读更多

Tomcat应用更新时,把新的WAR包放到webapps目录下,Tomcat就会自动把原来的同名webapp删除,并把WAR包解压,运行新的 webapp。

但是,有时候Tomcat并不能把旧的webapp完全删除,通常会留下WEB-INF/lib下的某个jar包,必须关闭Tomcat才能删除,这就导致自动部署失败。

解决方法是在<Context>元素中增加一个属性antiResourceLocking="true" antiJARLocking="true",默认是"false"。

这样就可以热部署了。

 

实际上,这两个参数就是配置Tomcat的资源锁定和Jar包锁定策略。

(1)antiJARLocking

先来看看应用的antiJARLocking属性设置为true时,Tomcat是怎么处理的。

针对antiJARLocking属性的处理集中在WebappClassLoader的getResource和findResourceInternal方法里,主要原理是将包含在Jar包里的资源抽取放到应用的工作目录(work里应用对应的目录)下去。

把这个属性设置为true之后,部署应用就可以在work\Catalina\localhost\struts2-blank\loader目录下看到被解压的Jar包内容。

antiJARLocking属性在有的时候并不会生效,从WebappClassLoader的getResource和findResource方法逻辑里可以看出一些端倪,在一些情况下(通过对Loader的delegate、searchExternalFirst等相关属性进行配置),资源的获取并不是WebappClassLoader去做的,而是其父加载器的getResource方法或父类的findResource方法去做的,WebappClassLoader的父类是URLClassLoader、父加载器是URLClassLoader实例。

 

(2)antiResourceLocking

当antiResourceLocking设置为true的时候,Tomcat不会锁定应用下的任何文件。那Tomcat是怎么做到这一点的呢?

在Tomcat的架构里,应用也是一个级别的容器,对应的接口是Context;各级容器本身都具备生命周期,而且配置了多个生命周期监听器来监听容器不同的生命周期过程。Tomcat在初始化的时候,给Context增加了一个生命周期监听器org.apache.catalina.startup.ContextConfig;然后在Context真正开始启动之前,会有一个BEFORE_START_EVENT状态,ContextConfig监听到这个状态的事件后,就会针对antiResourceLocking进行处理。

总结一下,就是如果应用的antiResourceLocking属性设置为true,就将应用的doc base移到临时目录下,让Tomca不会占用webapps下的文件。Tomcat里java.io.tmpdir默认指向Tomcat的temp目录。

 

副作用

从上面的分析来看,antiResourceLocking为true有几个副作用:

1) 会延长应用的启动时间,因为多了临时目录的清理和往临时目录拷贝应用内容的操作;a

2) 如果不知道这个属性的原理,修改webapps下应用的JSP,那就不会动态重加载到新的页面内容了,因为应用的doc base已经不再在webapps下了;

3) 停止Tomcat的时候,临时目录下实际的doc base会被删掉,

结合第二条和第三条,如果要修改应用的JSP,那必须将改动同时拷贝到两个目录下(原始doc base和临时目录下的doc base)。

所以Tomcat里这个属性缺省为false。在使用Tomcat 6.0.24之前的版本时,如果要用这个属性解决文件被锁的问题,三思而行。

分享到:
评论

相关推荐

    tomcat antiResourceLocking antiJARLocking 的作用和用法

    总结以上内容,可以看出antiResourceLocking和antiJARLocking在Tomcat中主要用于解决文件锁定问题,以支持更为灵活的Web应用部署和更新。但是,这些配置选择需要根据实际应用场景谨慎使用,因为它们可能会带来一些副...

    tomcat配置信息

    Tomcat 5.5 数据库连接池配置.doc tomcat 6.0.20在一个机器上安装多个服务的方法.doc tomcat 几种连接池配置代码.doc tomcat antiResourceLocking antiJARLocking 的作用和用法.doc Tomcat安全配置 .doc

    apache-tomcat-5.5.20-admin

    3.要想管理模块能够顺利运行,那么还要保证一点:确保设置了CATALINA_HOME这个系统环境变量,变量...antiResourceLocking="false" antiJARLocking="false"&gt;一行里的${catalina.home}改成你的tomcat的安装路径就可以了。

    Tomcat Context关键属性说明

    ### Tomcat Context关键属性说明 #### 一、引言 在Tomcat服务器中,`Context`元素用于配置一个Web应用程序的上下文环境。对于开发者来说,掌握这些配置属性至关重要,因为它们直接影响着Web应用的运行效率和安全性...

    tomcat6-集成admin

    tomcat6 admin 管理页面 本tomcat是用apache-tomcat-6.0.26-windows-x86.zip和...如果不添加也不影响使用,只是打开tomcat时没有admin的链接,也可以直接在IE地址栏中输入http://localhost:8080/admin/ 打开管理页面.

    tomcat6.0.X安装Admin

    ${catalina.home}/webapps/admin" privileged="true" antiResourceLocking="false" antiJARLocking="false"&gt; ``` 这里的 `${catalina.home}` 是 Tomcat 的安装根目录。 ##### 3. 添加依赖库 根据实际情况,可能...

    java中使用tomcat提供的JNDI数据源

    &lt;Context docBase="D:\myprj\WebRoot" privileged="true" antiResourceLocking="false" antiJARLocking="false"&gt; &lt;!-- Link to the user database we will get roles from --&gt; &lt;!-- 定义JNDI数据源 ...

    Tomcat7 负载Jar包

    可以通过修改`server.xml`中的`&lt;Context&gt;`标签,添加`antiResourceLocking="true"`和`antiJARLocking="true"`属性来优化。 4. **使用WebAppClassLoader**:针对特定应用的JAR,应放在Web应用的`WEB-INF/lib`下,由...

    tomcat配置手册

    antiResourceLocking="false" antiJARLocking="false"&gt; ``` 静态部署 静态部署是指在 Tomcat 运行之前就把相关的 Web 应用程序放置到合适的目录,在 Tomcat 启动的时候自动来部署这些应用程序。如果 ...

    tomcat8.0.32+jdk1.8安装和优化

    7. **安全设置**:更新`conf\server.xml`中的`&lt;Context&gt;`,启用安全配置,如`antiResourceLocking`和`antiJARLocking`,防止文件锁定问题。 通过上述步骤,你不仅能够成功安装Tomcat8.0.32和JDK1.8,还能对它们进行...

    tomcat6学习笔记.txt

    antiResourceLocking="false" antiJARLocking="false"&gt; ``` 确保 `docBase` 的值指向 `apache-tomcat-5.5.27\server\webapps\admin`。 同时,也需要确保 `apache-tomcat-6.0.18\conf\Catalina\localhost` 目录下...

    Tomcat三种配置方式--超棒

    在Tomcat服务器的默认安装结构中,`webapps`目录是专门用来存放Web应用项目的。当我们将自己的项目文件(通常是`.war`文件或整个项目文件夹)直接放置在这个目录下时,Tomcat会自动将这些应用部署起来。这种方式非常...

    tomcat数据源配置[总结].pdf

    &lt;Context docBase="D:\myprj\WebRoot" privileged="true" antiResourceLocking="false" antiJARLocking="false"&gt; &lt;!-- Link to the user database we will get roles from --&gt; &lt;Resource name="jdbc/pubs" // ...

    tomcat数据源配置[收集].pdf

    &lt;Context docBase="D:\myprj\WebRoot" privileged="true" antiResourceLocking="false" antiJARLocking="false"&gt; auth="Container" type="javax.sql.DataSource" driverClassName=...

    Tocmat简单配置

    本文将详细介绍如何配置一个Java项目到Tomcat环境中,以便进行开发和测试。 首先,我们需要**安装JDK**。JDK(Java Development Kit)是Java编程的基础,提供了编译、调试和运行Java程序所需的工具和库。在官网下载...

    tomcat6_jndi.pdf

    &lt;Context docBase="D:\Work\ZDNEWWORK\scheduler\webapp" path="/scheduler" reloadable="true" privileged="true" antiResourceLocking="false" antiJARLocking="false"&gt; name="jdbc/FIN_DS" auth="Container...

Global site tag (gtag.js) - Google Analytics