我们先来看看这个 antiResourceLocking 到底是干什么的!
If true, Tomcat will prevent any file locking. This will significantly impact
startup time of applications, but allows full webapp hot deploy and undeploy on
platforms or configurations where file locking can occur. If not specified, the
default value is false.
Please note that setting this to true has some side effects, including the
disabling of JSP reloading in a running server: see Bugzilla 37668.
Please note that setting this flag to true in applications that are outside the
appBase for the Host (the webapps directory by default) will cause the
application to be deleted on Tomcat shutdown. You probably don‘t want to do
this, so think twice before setting antiResourceLocking=true on a webapp that‘s
outside the appBase for its Host.
如果这个参数为true,那么将组织任何文件锁。这将明显的影响应用的启动时间,但允许webapps,可能发生锁的平台和配置下,支持完整的热部署和热卸载。如果不配置,默认值是false;
如果设置为true,有一些副作用,包括屏蔽了JSP文件在运行服务器上的重新加载。
如果设置为true,且部署在Host的AppBase目录外面(默认是webapps),在Tomcat关闭的时候将导致应用被删除。
最主要的就翻译到这里了。实际上,如果为false,因为存在锁,在你重新发布的时候,可能出现部分代码无法更新。因为原始文件可能因为被锁住了,不能删除。
当然,如果为false,那么部署的目录就是和包名相同了。如果是false,则会每次都放到一个临时目录下面,一个temp目录。这也是这个配置引发的一个副作用。
另外的一个类似的配置 antiJARLocking 是防止jar类库被锁定而无法删除这个作用的。
在最近开发过程中出现过这样的情况,当我在myeclipse发布项目的时候,在tomcat的temp文件夹中会出现项目的副本,这样的话会产生一些问题如:
当我们在网站中上传东西的时候,由于我们的文件是放在upload文件夹中,当我们再次发布网站项目的时候,tomcat中会产生一个新的项目副本,所以我们之前上传的文件,就不能读取了,例如,我们上传了图片,然后deloy以后,图片就不能显示了。
解决办法:
1、首先确保你的tomcat文件夹下的conf\Catalina\localhost路径中的两个文件host-manager.xml 和manager.xml 存在 antiResourceLocking 和antiJARLocking 的值为false ,至于这两个值的含义,可以google下,这里不解析
2、如果这样还不行的话,可以回到项目下的路径WebRoot\META-INF ,看是否有context.xml 这个文件,如果没有可以自己创建,添加以下语句,如果有的话,请把里面的值设为false:
<Context reloadable="true" antiResourceLocking="false"
antiJARLocking="false"/>