springboot自带的定时器:

@EnableScheduled  这个注解放在springboot的启动类上,表示启动springboot的定时器 

@Scheduled(corn ......)  注解在方法上,表示这个方法按照corn石英表达式设置的时间去调用

注意:注解的这个方法所在的类对象必须在spring容器上。

@Scheduled注解常用的参数

String cron():设置执行的石英表达式  石英表达式:https://cron.qqe2.com/  (在生成石英表达式网站)
long fixedDelay():上一次执行机结束之后多长时间后开始执行
long fixedRate():上次执行开始后多长时间后开始执行
long initialDelay():第一次执行要等待多长时间
注意:cron 和下面的三个不可以同时存在
@EnableScheduling
@Component
public class ServiceImpi {

    @Scheduled(cron = "0/1 * * * * ? ")
    public  void  test() throws InterruptedException {
        System.out.println("这个是springboot定时器");
    }
}

 

quarzx:定时器

在springBoot中使用quarzx

1:导入架包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

2:创建定时器定时执行方法。

    方法1:使用 MethodInvokingJobDetailFactoryBean 和 CronTriggerFactoryBean设置定时器 

@Component
public class QuartzJob1 {
    //定时执行的方法
    public void myJobBusinessMethod() {
        
        System.out.println("定时器执行");
    }
}
@Configuration
public class QuartzConfig {
    /**
     * 定时器绑定方法
     * @param quartzJob1
     * @return
     */
    @Bean(name = "myFirstExerciseJobBean")
    public MethodInvokingJobDetailFactoryBean myFirstExerciseJobBean(QuartzJob1 quartzJob1) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        jobDetail.setConcurrent(false); // 是否并发
        jobDetail.setName("general-myFirstExerciseJob"); // 任务的名字
        jobDetail.setGroup("general"); // 任务的分组
        jobDetail.setTargetObject(quartzJob1); // 被执行的对象
        jobDetail.setTargetMethod("myJobBusinessMethod"); // 被执行的方法
        return jobDetail;
    }

    /**
     * 表达式触发器工厂Bean
     */
    @Bean(name = "myFirstExerciseJobTrigger")
    public CronTriggerFactoryBean myFirstExerciseJobTrigger(@Qualifier("myFirstExerciseJobBean") MethodInvokingJobDetailFactoryBean myFirstExerciseJobBean) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(myFirstExerciseJobBean.getObject());
        tigger.setCronExpression("0/4 * * * * ?"); // 什么是否触发,Spring Scheduler Cron表达式
        tigger.setName("general-myFirstExerciseJobTrigger");
        return tigger;
    }
}

方法2:使用 JobDetailFactoryBean和 CronTriggerFactoryBean完成定时器的功能

@Component
public class QuartzJob2 implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
       this.quarzx1();
    }
    public  void  quarzx1()
    {
        System.out.println("这个是job定时器");
    }
}
@Configuration
public class QuartzConfig {
    /**
     * 定时器绑定方法
     * @param quartzJob1
     * @return
     */
    @Bean(name = "myFirstMysqlExerciseJobBean")
    public JobDetailFactoryBean myFirstExerciseJobBean() {
        JobDetailFactoryBean jobDetail = new JobDetailFactoryBean();
        jobDetail.setName("general-myFirstMysqlExerciseJob"); // 任务的名字
        jobDetail.setGroup("general"); // 任务的分组
        jobDetail.setJobClass(QuartzJob2.class);
        jobDetail.setDurability(true);
        return jobDetail;
    }

    /**
     * 表达式触发器工厂Bean
     */
    @Bean(name = "myFirstExerciseJobTrigger1")
    public CronTriggerFactoryBean myFirstExerciseJobTrigger(@Qualifier("myFirstMysqlExerciseJobBean") JobDetailFactoryBean myFirstExerciseJobBean) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(myFirstExerciseJobBean.getObject());
        tigger.setCronExpression("0/3 * * * * ?"); // 什么是否触发,Spring Scheduler Cron表达式
        tigger.setName("general-myFirstMysqlExerciseJobTrigger");
        return tigger;
    }
}

方法3:不使用配置类实现定时器,直接使用代码实现

@Component
public class QuartzJob2 implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
       this.quarzx1();
    }
    public  void  quarzx1()
    {
        System.out.println("这个是job定时器");
    }
}

 

 // 1. 创建JobDetail
        JobKey jobKey = new JobKey("hello", "hello");
        JobDetail jobDetail = JobBuilder.newJob(QuartzJob2.class) //
                .withIdentity(jobKey)//
                .build();

        // 2. 创建Trigger
        TriggerKey triggerKey = new TriggerKey("hello", "hello");
        SimpleTrigger trigger = TriggerBuilder.newTrigger()//
                .withIdentity(triggerKey)// 唯一标识
                .startNow()// 立即启动
                .withSchedule(SimpleScheduleBuilder//
                        .simpleSchedule()//
                        .withIntervalInSeconds(5)//
                        .repeatForever()//
                ).build();

        // 3. 创建Scheduler,并启动调度
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();

github地址:git@github.com:zhangyang-yu/springboot-quarzx.git

 

posted on 2021-01-14 16:34  晴耕--雨读  阅读(111)  评论(0编辑  收藏  举报