Quartz 解决从数据库job_data提取数据的异常

好久没更新了,事情太多了,一直再忙着领域驱动设计的落地,过段时间会发布DDD的文章。

前提,quartz的基础这里不说了,网上一大堆,最近接手一个重构底层项目,要做调度任务,应该选型的时候考虑到分布式和微服务,所以就用了quartz。

问题:一切流程都正常,配置JobDataMap,任务也能获取到相对应的数据,但重启服务,重新在数据库获取job_data的时候,发现执行任务拿不到保存的JobDataMap数据,看quartz的表里面,job_data是有值。

解决:一开始以为这个框架的bug,想着直接读数据库把这个job_data的值读出来就算了,后来发现是自己的打开方式错了,一开始是在网上仿照了一下别人的用法,只是在trigger上面的jobDataMap添加数据,所以在任务直接执行的时候是可以拿到设置的数据,但quartz保存到数据库的jobDataMap是在jobDetail里面,看表结构就知道了,问题迎刃而解。本来就没保存到数据,所以就没有获取到数据,虽然看表里是有数据,获取到了,但实际转化不了的,本来就是空的。

 Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(clazzName);
            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, groupName).withDescription(description).build();
            // 表达式调度构建器(即任务执行的时间)
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExp).withMisfireHandlingInstructionDoNothing();
            // 按新的cronExpression表达式构建一个新的trigger
            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobName, groupName).withSchedule(scheduleBuilder).build();
            // 获得JobDataMap,写入数据
            if (param != null) {
                trigger.getJobDataMap().putAll(param);
                jobDetail.getJobDataMap().putAll(param);
            }
            scheduler.scheduleJob(jobDetail, trigger);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值