Spring + quartz + MySQL,web项目重启以后,quartz自启成功但是并不恢复任务,怎么办?

时间:2023-01-16 04:40:59
我的是web项目,用的Spring 3.0.5.RELEASE + quartz 1.8.6,现在已经可以将数据存储到MySQL中持久化,但是重启web项目以后quartz可以自启动成功,可是不能恢复存储到MySQL中的任务。
由于我的quartz任务需要页面手动创建,所以Spring的配置文件只有一行:

<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false">
</bean>

<property name="autoStartup" value="true"/>我也试过,不过没用,一样是quartz启动,但是不恢复任务。

quartz.properties使用的JobStoreTX,在不使用Spring注入,直接使用web.xml配置org.quartz.ee.servlet.QuartzInitializerServlet时测试没有问题,重启工程也可以正确恢复任务,我没有额外的改动,文件如下:
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.tablePrefix = QRTZ_  
org.quartz.jobStore.isClustered = false  
# Configure Datasources 
#============================================================================ 
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver 
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz1x?useUnicode=true&characterEncoding=utf8 
org.quartz.dataSource.myDS.user = root 
org.quartz.dataSource.myDS.password =111111
org.quartz.dataSource.myDS.maxConnections = 10 

6 个解决方案

#1


你所说的不恢复任务是指什么

#2


引用 1 楼 ooppookid 的回复:
你所说的不恢复任务是指什么

比如我要求打印10次时间,但是打印了3次我就把tomcat关掉然后重启,剩下的7次并不会自动打印,也就是任务不能恢复。而我如果使用servlet就可以,随便我关停tomcat

#3


唉,搞到最后才发现使用spring嵌入的时候,配置文件必须要指定,不然SchedulerFactoryBean不会去寻找加载quartz.properties。只要在bean里加一个属性就解决。
	<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false">
<property name="configLocation" value="classpath:quartz.properties" />
</bean>

至于之前数据库持久化成功,这是个假象,那是我其他地方配置有问题,导致串数据库了。

#4


楼主给力!

#5


我 也是这个问题,  我重启服务器还是不好使

#6


我的任务也都是手动去添加的,比如我 在页面添加个  半小时后执行,如果不重启服务器    一切都很ok 。 但是重启服务器后, 数据库中的任务  貌似就没 加载到 调度起中。  找不到 需要执行的job   , 在我重启后, 如果我在新增一条定时任务,前面那个错过触发事件的任务    就会立马出发。  感觉是像   quartz 没有起来, 但是   启动完项目 ,  控制台 一只在输出

 batch acquisition of 0 triggers
MisfireHandler: scanning for misfires...
Found 0 triggers that missed their scheduled fire-time.


找不到 错过触发时间的任务

#1


你所说的不恢复任务是指什么

#2


引用 1 楼 ooppookid 的回复:
你所说的不恢复任务是指什么

比如我要求打印10次时间,但是打印了3次我就把tomcat关掉然后重启,剩下的7次并不会自动打印,也就是任务不能恢复。而我如果使用servlet就可以,随便我关停tomcat

#3


唉,搞到最后才发现使用spring嵌入的时候,配置文件必须要指定,不然SchedulerFactoryBean不会去寻找加载quartz.properties。只要在bean里加一个属性就解决。
	<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false">
<property name="configLocation" value="classpath:quartz.properties" />
</bean>

至于之前数据库持久化成功,这是个假象,那是我其他地方配置有问题,导致串数据库了。

#4


楼主给力!

#5


我 也是这个问题,  我重启服务器还是不好使

#6


我的任务也都是手动去添加的,比如我 在页面添加个  半小时后执行,如果不重启服务器    一切都很ok 。 但是重启服务器后, 数据库中的任务  貌似就没 加载到 调度起中。  找不到 需要执行的job   , 在我重启后, 如果我在新增一条定时任务,前面那个错过触发事件的任务    就会立马出发。  感觉是像   quartz 没有起来, 但是   启动完项目 ,  控制台 一只在输出

 batch acquisition of 0 triggers
MisfireHandler: scanning for misfires...
Found 0 triggers that missed their scheduled fire-time.


找不到 错过触发时间的任务