我已经尝试了 3 个小时,但没有任何效果。我需要放弃新的战争并让 tomcat 自动部署它。但并没有发生。这是我的简化配置:
server.xml
<Engine name="Catalina" defaultHost="localhost">
<Host name="something.com" appBase="/var/www/something.com/webapps"
unpackWARs="false" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="application.war" debug="0" reloadable="true">
... some realm and data source stuff here
</Context>
</Host>
</Engine>
当我启动tomcat时,一切都运行良好。 我尝试了两种方法:
- 使用 scp 在该位置复制一场新的战争。
- 感人
/var/www/something.com/webapps/application.war
。
在两种情况下我都可以看到catalina.err
相同的消息:
INFO: Undeploying context [/application]
如果没有相应的
INFO: Deploying web application archive application.war
当我重新启动 tomcat 时,我得到了这个。我感觉这是因为它不在里面,CATALINA_BASE/webapps
但我不知道该怎么做。有什么帮助吗?
答案1
可能有很多原因。我遇到的一些具体问题:
(1)文件权限。确保 webapps 目录、工作目录、war 本身以及它访问的任何特殊文件都可以由运行 Tomcat 的用户读取/写入(理想情况下,它们应该由该用户拥有)。
(2) 之前的版本没有完全删除。尝试停止 Tomcat,删除 war 和匹配文件夹,复制新的 war,然后启动 Tomcat。如果成功,则问题可能出在遗留文件上。(例如,我有一个应用程序没有完全清理自身)。
(3) 由于应用程序存在问题,应用程序可能无法正确初始化。如果 war 自动部署到文件夹中,则自动部署正在运行,但应用程序未完全初始化。查找日志消息。根据您的应用程序,这可能位于 tomcat/logs、当前目录或标准输出中。如果可以,请更改日志属性(例如 log4j.properties 文件)以显示调试级别消息。
(4) Permgen 内存问题。当您在 Tomcat 中重新加载应用程序时,它会耗尽 Permgen 内存。根据定义,这是无法恢复的。重新加载太多次,Tomcat 就会因内存不足错误而崩溃(您通常可以在日志中看到这一点)。要么配置更多的 permgen,要么更好的办法是在重新部署应用程序时关闭/重新启动 Tomcat。
答案2
我认为罪魁祸首是unpackWARs="false"
从最近在 stackoverflow 上发帖,发现unpackWARs="false"
导致无法检测到新版本的WAR。有什么具体原因吗false
?
答案3
难道不应该吗docBase="application"
?docBase="application.war"
如果我理解正确的话,这将导致 Tomcat 首先查找一个文件夹/var/www/something.com/webapps/application/
,如果该文件夹不存在,则查找/var/www/something.com/webapps/application.war
答案4
虽然这是一个老话题,但我只想指出一件事。在 IDE 中右键单击服务器并查找服务器位置并选择使用 Tomcat 安装。这将控制安装位置并引发战争。