项目背景:spring+quartz+dubbo+…
最近在检查日志的时候,发现自己的定时任务执行了多次,而且是每个任务执行了多次,但是在本地环境的时候 是不会这样的,本地使用jetty启动的,服务器上使用tomcat启动的,
后来发现 在tomcat下面启动的时候,在它的配置文件中(conf/server.xml)
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 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"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" reloadable="true" docBase="../webapps/framework-admin-webapp-v2" workDir="work" />
其中告诉Tomcat,在启动的时候加载webapps下的所有项目工程文件,又让Tomcat再加载了一遍,这种情况下会导致工程中的quartz定时被两次触发,执行两次。
解决方法:
修改tomcat下面的server.xml文件
autoDeploy="false" deployOnStartup="false"
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">
<!-- 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"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" reloadable="true" docBase="../webapps/framework-admin-webapp-v2" workDir="work" />
</Host>
autoDeploy:是否允许自动部署,默认值是true,即表示 Tomcat 会自动检测appBase目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
deployOnStartup=“false”,表示Tomcat服务器启动时, 不会自动发布appBase目录下所有的Web应用。
来源:oschina
链接:https://my.oschina.net/u/242157/blog/4307125