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 "%r" %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 这个应用,则会被分别加载,所以解决方法是,清空 <Context> 即可。

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

被折叠的 条评论
为什么被折叠?



