方案1: 修改qrtz_triggers 表的NEXT_FIRE_TIME 字段
// 入参是triggerName, triggerGroup,延迟8秒执行
public void executeJobNow(String triggerName, String triggerGroup) {
Map<String, Object> params = new HashMap<>();
params.put("interval", System.currentTimeMillis() + 8000); // 8秒
params.put("triggerName", triggerName);
params.put("triggerGroup", triggerGroup);
qrtzMapper.updateNextFireTime(params);
}
// 实际上是修改qrtz_triggers 表的NEXT_FIRE_TIME 字段
// 前提是java服务器和数据库时钟相等
<update id="updateNextFireTime" parameterType="java.util.Map">
update qrtz_triggers set NEXT_FIRE_TIME = #{interval}
where trigger_name = #{triggerName} and trigger_group = #{triggerGroup}
</update>
方案2: 直接调用task方法调用executeInternal方法
<
本文介绍两种使Quartz定时任务立即执行的方法。方案一通过更新数据库qrtz_triggers表中的NEXT_FIRE_TIME字段实现,确保Java服务器与数据库时钟同步。方案二直接调用任务方法的executeInternal函数,抛出异常时进行错误处理。
最低0.47元/天 解锁文章
6384

被折叠的 条评论
为什么被折叠?



