实现自定义定时器

1.引入依赖

<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>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>

2.定时器工厂类

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;

@Component
public class SpringJobFactory extends AdaptableJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

3.定时器配置类,初始化定时器工程类

import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {
    @Autowired
    private SpringJobFactory springJobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(springJobFactory);
        return schedulerFactoryBean;
    }

    @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }
}

4.定时任务类

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;


@Configuration
@Component
@EnableScheduling
public class ScheduleTask implements Job {

    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
        Map<String, Object> map = new HashMap<>(5);
        map.put("view",dataMap.getString("planId"));
        NotifyBean notifyBean = NotifyBean.builder().type(1).message("测试").data(map).build();
        simpMessagingTemplate.convertAndSend("/topic/ansys", notifyBean);
    }
}

5.

@Autowired
private Scheduler scheduler;

/**
 * 参数:startCron,cron表达式
 * @param startCron
 * @param planId
 */
private void startPlan(String startCron,String planId){
     try {
         JobDataMap map=new JobDataMap();
         map.put("planId",planId);
         String group="group"+ UUID.randomUUID().toString().substring(1,5);
         JobDetail jobDetail = JobBuilder.newJob(ScheduleTask.class) .withIdentity("job1", group).setJobData(map).build();
         CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(startCron);
         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", group) .withSchedule(scheduleBuilder).build();
         scheduler.scheduleJob(jobDetail,cronTrigger);
    }catch (Exception e){
        e.printStackTrace();
    }
}

 

posted @ 2018-10-23 16:14  *码识途  阅读(416)  评论(0)    收藏  举报