概述
用quartz执行并运维job
用spring本身可以做一些定时任务,更多的是配置一些定时任务。但是如果通过数据库甚至页面控制定时任务启停,启之前从数据库里取些定时任务相关配置,实时从页面对任务进行修改等,我更喜欢用quartz。
quartz的依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
quartz主要包括四个部分,任务job,任务描述jobDetail,触发器Trigger,调度器Scheduler。
job-----任务
这里面主要写定时执行的任务,比如向数据库某种表录入数据之类。这个类注意几点:
-
继承Job
-
重写execute方面里面怎么拿到spring容器的问题
public class DemoTask implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.debug("execute demo start" + new Date());
//注意这个类execute方法里面直接注入dao是拿不到的,要通过JobDataMap传递,哪里放进来后面说
DemoDao demoDao = (DemoDao) jobExecutionContext.getJobDetail().getJobDataMap()
.get("demoDao");
doTask(demoDao);
//调业务方法
log.info("execute demo end" + new Date());
}
}
把任务描述jobDetail,触发器Trigger注册到调度器Scheduler
包括:
jobDetail 绑定job实例,jobDetail里塞入参数;
Trigger塞入参数;
jobDetail,Trigger注册到Scheduler
@Service
public class DemoImpl implements DemoService {
//用来代表业务操作业务数据表
@Autowired
DemoDao demoDao;
//用来代表获取记录定时器配置的表
@Autowired
DeployDao deployDao;
@Autowired
private SchedulerFactory schedulerFactory;
Scheduler scheduler = null;
/**
*
启动调度器
*/
public String start() throws SchedulerException {
String result;
scheduler = schedulerFactory.getScheduler();
result = scheduleJob1(scheduler);
scheduler.start();
return result;
}
private String scheduleJob1(Scheduler scheduler) throws SchedulerException {
//***任务描述jobDetail部分***
//JobDataMap用于传递spring容器到job里
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("demoDao", demoDao);
//用JobBuilder创建之前的job实例
JobBuilder jobBuilder = JobBuilder.newJob(DemoTask.class);
//为JobBuilder指定组和job名
jobBuilder.withIdentity("job1", "group1");
//将用于传递的jobDataMap塞入JobBuilder
jobBuilder.setJobData(jobDataMap);
//用配好的JobBuilder创建JobDetail
JobDetail jobDetail = jobBuilder.build();
//***触发器Trigger部分***
//从数据库获取cron表达式,cron提前配置在数据库里的。cron表达式网上有工具可以轻易生成
Deploy deploy = deployDao.getdeploy();
String cron = deploy.getCron();
// 创建cron表达式的规则
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
//创建cron触发器,指定组,除非器名字,使用规则
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(scheduleBuilder).build();
//***注册调度器部分***注册调度器
scheduler.scheduleJob(jobDetail, cronTrigger);
return "ok";
}
}
以上service里就完成里创建一个调度器scheduler并注册任务和触发器的过程。
scheduler自身的一些方法可以用于运维页面
//开启调度器
scheduler.start();
//关闭调度器,等待当前进行任务结束
scheduler.shutdown(true);
//立即关闭调度器
scheduler.shutdown();
//反馈当前调度器是否停止
isStart = !scheduler.isShutdown();
装载请标明出处 https://blog.csdn.net/renhuan28/article/details/81745803
最后
以上就是开放大树为你收集整理的用quartz执行并运维job的全部内容,希望文章能够帮你解决用quartz执行并运维job所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复