我项目使用定时器后 突然发现 同一时刻同一个方法被执行2次,日志显示都是同一个线程在执行。不知道什么原因,弄了很久 才发现原来是Tomcat中配置问题:
问题描述:
要求项目不加项目名称就能访问到,因此要在Tomcat的server.xml中写上
<Context path="" docBase="gy_Quertz" debug="0" reloadable="true"/>、
gy_Quertz 即项目名称。这样项目就不要加项目名称也可以访问了。
但是问题就在这里 如果加上这句话 Quartz会在同一时刻将我一个方法执行2次。我测试过 不加这句话的话
就是正常的一次!
这是什么原因 (希望能明白原理)如果我又想加上那句话又只让 Quartz正常的执行一次!我该怎么解
决!?? 谢谢了!
quartztomcatpath测试
问题描述:
要求项目不加项目名称就能访问到,因此要在Tomcat的server.xml中写上
<Context path="" docBase="gy_Quertz" debug="0" reloadable="true"/>、
gy_Quertz 即项目名称。这样项目就不要加项目名称也可以访问了。
但是问题就在这里 如果加上这句话 Quartz会在同一时刻将我一个方法执行2次。我测试过 不加这句话的话
就是正常的一次!
这是什么原因 (希望能明白原理)如果我又想加上那句话又只让 Quartz正常的执行一次!我该怎么解
决!?? 谢谢了!
quartztomcatpath测试
但是 加上这个项目名称后 定时器就会出现如上情况
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<!-- 定时汇总数量 每天凌晨1点钟半 执行统计 0 30 1 * * ?-->
<job>
<job-detail>
<concurrent>false</concurrent>
<name>statisticsBid</name>
<group>statisticsBid</group>
<job-class>net.gy_center.servlet.StatisticsBidServlet</job-class>
</job-detail>
<trigger>
<cron>
<name>statisticsBid</name>
<group>statisticsBid</group>
<job-group>statisticsBid</job-group>
<job-name>statisticsBid</job-name>
<cron-expression>0 30 1 * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz> 在web.xml中是这样配置的:
<!-- Quartz定时调度 star-->
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Quartz定时调度 end-->
这个web.xml加载的应该是quartz.properties
quartz.properties文件内容如下:
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown =trueorg.quartz.plugin.jobInitializer.fileName = quartz_job.xml这一句就是我的xml文件。
用监听器不行吗?ServletContextListener
项目启动就开始定时器
何来的配置文件
Tomcat里面我配置了项目名称 是Tomcat加载了2次项目