zoukankan      html  css  js  c++  java
  • quartz 定时器执行

    类存储job信息

    public class JobInfo {//省略setter getter
        String jobName;
        String jobGroup;
        Class<? extends Job> jobClass;
        JobDataMap dataMap;
        public JobInfo() {}
        public JobInfo(String jobName, String jobGroup, Class<? extends Job> jobClass, JobDataMap dataMap) {
            this.jobName = jobName;
            this.jobGroup = jobGroup;
            this.jobClass = jobClass;
            this.dataMap = dataMap;
        }
    }
    

    实现类,继承Job接口

    public class HelloJob implements Job {
        private static final Logger logger = Logger.getLogger(HelloJob.class);
        public HelloJob() {}
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            logger.error("*****************job start*****************");
            JobKey jobKey = jobExecutionContext.getJobDetail().getKey();
            // JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
            JobDataMap dataMap = jobExecutionContext.getMergedJobDataMap();
            String name = dataMap.getString("name");
            logger.info("*****************good job*****************");
            logger.info("*****************" + jobKey + "--" + name + "*****************");
            logger.error("*****************job end*****************");
        }
    }
    

    测试,三种任务(Once、Repeat、Cron)

    public class QuartzTest {
        public static void main(String[] args) {
            JobInfo jobInfo = new JobInfo();
            jobInfo.setJobClass(HelloJob.class);
            jobInfo.setJobName("myJob");
            jobInfo.setJobGroup("myGroup");
            Map map = new HashMap();
            map.put("name", "wxy");
            JobDataMap jobDataMap = new JobDataMap(map);
            jobInfo.setDataMap(jobDataMap);
            try {
                // Grab the Scheduler instance from the Factory
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
                // and start it off
                scheduler.start();
    
                JobDetail job = createJob(jobInfo);
                // Trigger trigger = createSimpleOrRepeatTrigger(jobInfo);
                String cron = "0/10 * * * * ? ";
                Trigger trigger = createCronTrigger(jobInfo, cron);
    
                scheduler.scheduleJob(job, trigger);
    
                TimeUnit.MILLISECONDS.sleep(10 * 60 * 1000);
                scheduler.shutdown();
    
            } catch (SchedulerException se) {
                se.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        private static JobDetail createJob(JobInfo jobInfo) {
            JobDetail job = newJob(jobInfo.getJobClass()).withIdentity(jobInfo.getJobName(), jobInfo.getJobGroup())
                    .usingJobData(jobInfo.getDataMap())
                    .build();
            return job;
        }
    
        private static Trigger createSimpleOrRepeatTrigger(JobInfo jobInfo) {
            Trigger trigger = newTrigger().withIdentity(jobInfo.getJobName() + "_trg", jobInfo.getJobGroup())
                    .startNow()
                    // .startAt(futureDate(5, DateBuilder.IntervalUnit.MINUTE))
                    // .startAt(dateOf(10, 37, 0))
                    // .endAt(dateOf(11, 0, 0))
                    .withSchedule(
                            simpleSchedule()
                                    .withRepeatCount(1)
                                    .withIntervalInSeconds(10)
                            // .repeatForever()
                    )
                    .build();
            return trigger;
        }
    
        private static Trigger createCronTrigger(JobInfo jobInfo, String cron) {
            Trigger trigger = newTrigger().withIdentity(jobInfo.getJobName() + "_trg", jobInfo.getJobGroup())
                    .startNow()
                    .withSchedule(CronScheduleBuilder.cronSchedule(cron).inTimeZone(TimeZone.getDefault())
                    )
                    .build();
            return trigger;
        }
    
    }
    

      

    springboot使用定时器,定时器数据存在表中

    @Configuration
    public class CompleteScheduleConfig implements SchedulingConfigurer {
        @Autowired
        CronMapper cronMapper;
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            scheduledTaskRegistrar.addTriggerTask(
                    () -> System.out.println("执行定时任务2: " + LocalDateTime.now().toLocalTime()),
                    triggerContext -> {
                        String cron = cronMapper.getCron();
                        if (StringUtils.isEmpty(cron)) {
                            // Omitted Code ..
                        }
                        return new CronTrigger(cron).nextExecutionTime(triggerContext);
                    }
            );
        }
    
        @Mapper
        public interface CronMapper {
            @Select("select cron from cron limit 1")
            String getCron();
        }
    }
    View Code

    表中数据如下:

    cron_id   cron
    1 0/10 * * * * ?
  • 相关阅读:
    install jqdatasdk
    分布式唯一ID自增(雪花算法)
    JVM内存布局及GC知识
    double涉及大数据的时候会变成科学计数法
    IDEA中的JUNIT测试
    spring boot 整合 swagger2
    springboot 报错nested exception is java.lang.IllegalStateException: Failed to check the status of the service xxxService No provider available for the service
    解决jar包依赖冲突(idea)
    IDEA中springboot的热部署
    Exception in thread "main" java.lang.AbstractMethodError: org.springframework.boot.context.config.ConfigFileApplicationListener.supportsSourceType(Ljava/lang/Class;)Z
  • 原文地址:https://www.cnblogs.com/jhin-wxy/p/11813631.html
Copyright © 2011-2022 走看看