实现自定义定时器
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(); } }
浙公网安备 33010602011771号