如何使用sql手动更改石英作业预定时间?

时间:2017-03-17 06:12:00

标签: java sql-server quartz-scheduler job-scheduling quartz

我正在使用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。

Table Structure:

2 个答案:

答案 0 :(得分:2)

我相信你不应该直接用SQL更新Quartz表。在Quartz文档中没有正确的SQL方法,因此,没有人保证将来不会对Quartz和数据库之间的接口进行任何更改。

根据文件Lesson 9: Job Stores

  

切勿在代码中直接使用JobStore实例。由于某些原因   很多人都试图这样做。 JobStore用于幕后   使用Quartz本身。你必须告诉Quartz(通过配置)   哪个JobStore要使用,但那时你应该只使用   代码中的调度程序接口。

您应该按照以下文档更新触发器。

How-To: Updating a trigger

如果您没有用户界面,则需要创建新界面以便以某种方式更新您的日程安排。

答案 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表上看到任何变化。