首页 新闻 会员 周边

quartz动态加载

0
悬赏园豆:20 [已解决问题] 解决于 2013-07-15 16:45

最近用到Quartz调度任务,想实现任务启动时间存储到数据库,修改的启动时间马上映射到Quartz的job,实现动态修改job。

如何实现在数据库中动态加载job?  (Quartz是Net版本)

陀螺-的主页 陀螺- | 初学一级 | 园豆:74
提问于:2013-05-28 11:49
< >
分享
最佳答案
0

在数据库中改job的参数 然后load回去, 这不是好的办法。

应该在Quartz中更改job参数, 然后让Quartz自己保存到数据库中。

更改办法是调用     scheduler.AddJob(jobDetail, true);    //true 会覆盖相同jobkey的job

 

如果你只想改调用时间,  也就是要重新schedule job

要用 scheduler.RescheduleJob(new TriggerKey(triggerName, triggerGroup), newTrigger)

newTrigger 会覆盖之前的Trigger。 job会在新Trigger指定的时间去运行。

 

所有这些都不需要直接去修改数据库。你如果换了其他jobStore, 比如xml的, 这种方法也能支持。

收获园豆:20
gunsmoke | 老鸟四级 |园豆:3592 | 2013-05-29 06:09

我看到它源码介绍,能将job存储到数据库中,并给了数据库建库的sql,请问这个功能怎么使用?需要做一些配置

陀螺- | 园豆:74 (初学一级) | 2013-05-29 17:06

@t-h: 官方文档 http://quartznet.sourceforge.net/tutorial/lesson_9.html

简单的说将quartz.config配置如下

quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz

quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz

quartz.jobStore.tablePrefix = QRTZ_

quartz.jobStore.dataSource=default

quartz.dataSource.default.connectionStringName=MyDbConnection

quartz.dataSource.default.provider=SqlServer-20

以上配置用了 SqlServer 做jobStore, 数据库connectionString名字是MyDbConnection。  你用Quartz附带的sql建好数据库, 然后在MyDbConnection这个connectionString里填好数据库连接的参数, 这样就能用了。

gunsmoke | 园豆:3592 (老鸟四级) | 2013-05-30 07:18
其他回答(1)
0
2012 | 园豆:21230 (高人七级) | 2013-05-28 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册