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

猜你喜欢

转载自blog.csdn.net/weixin_38370441/article/details/113869358
今日推荐