Spring项目使用Quartz创建定时任务
Maven引入
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
Spring组件注册
监听器,随着项目一起启动
注册为Spring的组件,托付给Spring管理
@Component
public class TimingTaskSchedule implements ServletContextListener {
private static ExtLogger logger = ExtLogger.create(TimingTaskSchedule.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
try {
QuartzLoad.run();
} catch (SchedulerException | IOException e) {
logger.error("start scheduler jobs failed");
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
QuartzLoad.stop();
} catch (SchedulerException e) {
logger.error("stop scheduler jobs failed");
}
}
}
Quartz任务注册与执行
public class QuartzLoad {
static final ExtLogger logger = ExtLogger.create(QuartzLoad.class);
// Quartz包中定义的类
private static Scheduler scheduler;
/**
* start scheduler
*
* @throws SchedulerException SchedulerException
* @throws IOException IOException
*/
public static void run() throws SchedulerException, IOException {
// 1、创建调度器Scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
myTaks();
}
/**
* Remove invalid users
*
* @throws SchedulerException SchedulerException
*/
private static void MyTask() throws SchedulerException {
logger.info("Start My task");
// 2、创建JobDetail实例,并与具体Job类绑定
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(MyJob.class.getName(), "MyJob") // id名称
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(MyJob.class.getName(), "MyJobGroup") // 这个trigger分组的名称
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ? *")) // trigger触发时机
.build();
scheduler.scheduleJob(jobDetail, trigger); // scheduler执行
scheduler.start();
}
/**
* stop scheduler
*
* @throws SchedulerException SchedulerException
*/
public static void stop() throws SchedulerException {
scheduler.shutdown();
}
}
具体任务实现job接口
public class MyJob implements Job {
private static final ExtLogger LOGGER = ExtLogger.create(MyJob .class);
// 防止Spring还未生成实例
private static MyService myService = SpringContext.getBean(MyService .class);
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
executeTask();
}
private void executeTask() {
myService.fun1();
}
}
参考:
https://blog.csdn.net/noaman_wgs/article/details/80984873
讲解了Quartz各种组件以及组件对应的API