我正在使用Quartz作业调度程序来运行一些作业。使用java api我正在管理这份工作。
当我使用java将作业重新安排到不同的时间时,
scheduler.deleteJob(jobName, jobGroupName);
addJobsInScheduler(jobName, jobGroupName, triggerName,
triggerGroup, newTime, schoolName);
工作正在重新安排并在指定时间触发。
现在有一个要求我必须在没有UI的情况下重新安排工作(没有Java api)。
根据我的理解,当我重新安排工作时,下表条目会更新。
QRTZ_JOB_DETAILS
QRTZ_TRIGGERS
QRTZ_CRON_TRIGGERS
所以我手动更新了QRTZ_TRIGGERS,QRTZ_CRON_TRIGGERS中的开火时间。但是在更新的时间没有触发工作。
这可能达到我的要求吗?
注意:我在后端使用sql server 2008。
答案 0 :(得分:2)
我相信你不应该直接用SQL更新Quartz表。在Quartz文档中没有正确的SQL方法,因此,没有人保证将来不会对Quartz和数据库之间的接口进行任何更改。
切勿在代码中直接使用JobStore实例。由于某些原因 很多人都试图这样做。 JobStore用于幕后 使用Quartz本身。你必须告诉Quartz(通过配置) 哪个JobStore要使用,但那时你应该只使用 代码中的调度程序接口。
您应该按照以下文档更新触发器。
如果您没有用户界面,则需要创建新界面以便以某种方式更新您的日程安排。
答案 1 :(得分:0)
经验丰富,我们只需更新NEXT_FIRE_TIME列:
`UPDATE dbo.QRTZ_TRIGGERS SET NEXT_FIRE_TIME =1491004800 `
其中1491004800是2017年4月1日00:00:00 GMT
使用下面的T-SQL获取您想要的NEXT_FIRE_TIME。您可能需要更改GETUTCDATE()。
SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
然后更新QRTZ_CRON_TRIGGERS表
UPDATE dbo.QRTZ_CRON_TRIGGERS set CRON_EXPRESSION='00 10 11 ? * *'
其中'00 10 11? * *'每天上午11点10分运行。您可以从CronMaker
获取cron表达式这可能不是最好的做法,但从经验来看,它对我们没有任何问题。 我强烈建议先在较低的环境中测试它。等待作业触发,看看你是否在QRTZ_TRIGGERS表上看到任何变化。