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