tomcat 加载一个类两次

当使用Tomcat作为服务器部署项目时,遇到同一QuartzJob类被加载两次导致任务重复执行的问题。通过检查配置文件server.xml,发现错误配置导致了应用被加载两次。解决方法是清空相应的<Context>标签。

tomcat 加载一个类两次

有一个项目使用 tomcat 作为服务器,部署好后,发现同一个 Quartz Job 类被加载两次,导致了相同的任务被执行两次,这是一个比较严重的问题。

解决方法

一开始猜测是由于有多个 tomcat 实例被启动,而每个实例启动了一个应用。但发现不是,因为对于同一个端口只能有一个应用被启动,所以否定了这个猜测。
后来通过查阅资料了解到,tomcat 对一个 web 应用会有一个类加载器,所以猜测是tomcat加载了两次应用,故导致类被加载了两次。后来查看 tomcat/conf/server.xml 文件,发现果然配置有误:

“` xml

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>

  <Context docBase="D:\apache-tomcat-8.0.24\wtpwebapps\webank_web_dms" path="/webank_web_dms" reloadable="false" source="org.eclipse.jst.jee.server:webank_web_dms"/></Host>

上面配置中,指定了两个应用目录:webapps 和 D:\apache-tomcat-8.0.24\wtpwebapps\webank_web_dms ,若它们下面都存在 webank_web_dms 这个应用,则会被分别加载,所以解决方法是,清空 &ltContext&gt 即可。

### Tomcat 启动闪退的原因及解决方案 Tomcat 启动闪退是一个常见的问题,可能由多种原因引起。以下是可能导致此问题的常见原因及其对应的解决方案。 #### 1. **Java 环境配置错误** 如果系统中未正确安装 Java 或环境变量配置不正确,Tomcat 将无法正常启动。确保已安装正确的 Java 版本,并将 `JAVA_HOME` 指向 JDK 的安装目录[^2]。此外,需将 `%JAVA_HOME%\bin` 添加到系统的 `PATH` 环境变量中。如果需要,可以设置 `JRE_HOME` 指向 JRE 的安装目录。 #### 2. **内存设置不足** Tomcat 启动时可能因内存不足而闪退。可以通过调整 JVM 启动参数来解决此问题。在 Tomcat 的 `bin` 目录下修改 `catalina.bat`(Windows)或 `catalina.sh`(Unix/Linux)文件,增加堆内存参数 `-Xms` 和 `-Xmx`,例如: ```bash JAVA_OPTS="-Xms512m -Xmx1024m" ``` 这将为 JVM 分配足够的内存以支持 Tomcat 的运行[^2]。 #### 3. **端口冲突** Tomcat 默认使用 8080 端口,如果该端口已被其他程序占用,则可能导致启动失败。可以使用以下命令检查端口占用情况: ```bash netstat -ano | findstr "8080" ``` 如果发现端口被占用,可以选择关闭占用该端口的程序,或者修改 Tomcat 的 `server.xml` 文件中的端口号配置,例如将 `<Connector port="8080" ... />` 修改为其他未被占用的端口[^4]。 #### 4. **配置文件错误** Tomcat 的配置文件(如 `server.xml`、`context.xml` 等)可能存在语法错误或配置不当,导致启动失败。仔细检查这些文件的内容,确保没有拼写错误或不符合规范的配置项。查阅 Tomcat 官方文档可以帮助确认配置是否正确[^2]。 #### 5. **版本兼容性问题** Tomcat 和 Java 的版本不兼容也可能导致启动失败。确保所使用的 Tomcat 版本与 Java 版本兼容。如果不兼容,可以考虑升级或降级其中一个版本[^2]。 #### 6. **应用程序错误** 应用程序本身的错误(如加载失败、初始化异常等)可能导致 Tomcat 启动后立即退出。检查 Tomcat 日志文件(通常位于 `logs/catalina.out`),寻找具体的错误信息并解决问题[^3]。 #### 7. **系统资源不足** 系统资源(如磁盘空间、文件句柄数量等)不足也可能导致 Tomcat 启动失败。清理不必要的文件以释放磁盘空间,并调整操作系统的资源限制(如增大最大文件句柄数)。例如,在 Linux 系统中,可以通过以下命令查看和修改文件句柄限制: ```bash ulimit -n ulimit -n 65535 ``` #### 8. **尝试重新安装** 如果以上方法均无法解决问题,可以尝试重新安装 JDK 和 Tomcat。此外,通过命令行启动 Tomcat 并查看错误输出,有助于定位问题所在。例如,在 Windows 系统中,可以运行以下命令: ```cmd startup.bat ``` 在 Unix/Linux 系统中,运行以下命令: ```bash ./startup.sh ``` --- ### 示例代码:调整 JVM 内存参数 以下是调整 JVM 内存参数的示例代码,适用于 `catalina.bat` 或 `catalina.sh` 文件。 ```bash # Windows (catalina.bat) set JAVA_OPTS=-Xms512m -Xmx1024m # Unix/Linux (catalina.sh) export JAVA_OPTS="-Xms512m -Xmx1024m" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值