1、作业任务
有部分场景需要动态添加和管理定时任务,基于上面的加载流程,在自定义一些步骤就可以。
@Component public class GetTimeJob implements SimpleJob { private static final Logger LOG = LoggerFactory.getLogger(GetTimeJob.class.getName()) ; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ; @Override public void execute(ShardingContext shardingContext) {
LOG.info("Job Name:"+shardingContext.getJobName());
LOG.info("Local Time:"+format.format(new Date()));
}
}
2、添加任务服务
这里就动态添加上面的任务。
@Service public class TaskJobService { @Resource private ZookeeperRegistryCenter zookeeperRegistryCenter; public void addTaskJob(final String jobName,final SimpleJob simpleJob, final String cron,final int shardCount,final String shardItem) { JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder(
jobName, cron, shardCount)
.shardingItemParameters(shardItem).build();
JobTypeConfiguration jobTypeConfiguration = new SimpleJobConfiguration(jobCoreConfiguration,
simpleJob.getClass().getCanonicalName());
LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(
jobTypeConfiguration).overwrite(true).build();
TaskJobListener taskJobListener = new TaskJobListener(); SpringJobScheduler jobScheduler = new SpringJobScheduler(
simpleJob, zookeeperRegistryCenter,
liteJobConfiguration, taskJobListener);
jobScheduler.init();
}
}
补刀一句:这里添加之后,任务就会定时执行,如何停止任务又是一个问题,可以在任务名上做一些配置,比如在数据库生成一条记录[1,job1,state],如果调度到state为停止状态的任务,直接截胡即可。
3、测试接口
@RestController public class TaskJobController { @Resource private TaskJobService taskJobService ; @RequestMapping("/addJob") public String addJob(@RequestParam("cron") String cron,@RequestParam("jobName") String jobName,
@RequestParam("shardCount") Integer shardCount,
@RequestParam("shardItem") String shardItem) {
taskJobService.addTaskJob(jobName, new GetTimeJob(), cron, shardCount, shardItem); return "success";
}
}
原文链接:https://my.oschina.net/cicadasmile/blog/3192286
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。