springBoot实现定时调度

如何使用

SpringBoot本身已经为我们提供了内置的定时器Scheduled,我们直接使用即可。

[java]  view plain  copy
  1. @Configuration  
  2. @EnableScheduling  
  3. public class SchedulingConfig {  
  4.   
  5.     @Scheduled(cron = "0 0/1 * * * ?")  
  6.     public void test(){  
  7.         System.out.println("定时调度。。。。。。。。。。。。");  
  8.     }  
  9. }  

@Sheduled注解

Cron属性——String
Seconds (秒): 可出现", - * /"四个字符,有效范围为0-59的整数
Minutes (分): 可出现", - * /"四个字符,有效范围为0-59的整数
Hours (时): 可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth (天/月): 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
Month (月): 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek (星期几): 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year (年): 可出现", - * /"四个字符,有效范围为1970-2099年
推荐一个cron表达式自动生成的网站 点击获取
fixedRate属性——Long

表示多长时间执行一次,单位为ms(毫秒),后执行

fixedDelay属性——Long

表示多长时间执行一次,单位为ms(毫秒),先执行fixedRate与fixedDelay不同在于启动时先走定时器fixedRate后执行代码块,而fixedDelay先执行代码块,后执行定时器,通过以下代码来演示

[java]  view plain  copy
  1. @Configuration  
  2. @EnableScheduling  
  3. public class SchedulingConfig {  
  4.   
  5.     @Scheduled(fixedRate = 10000)  
  6.     public void test1() throws InterruptedException {  
  7.         Thread.sleep(5000);  
  8.         System.out.println("定时任务1================");  
  9.     }  
  10.   
  11.     @Scheduled(fixedRate = 10000)  
  12.     public void test2() throws InterruptedException {  
  13.         Thread.sleep(5000);  
  14.         System.out.println("定时任务2================");  
  15.     }  
  16. }  

启动application,输出结果为

[plain]  view plain  copy
  1. 定时任务2================  
  2. 定时任务1================  
  3. 定时任务2================  
  4. 定时任务1================  
initialDelay属性——Long

该属性表示第一次执行延时的时间,只针对第一次执行有效

Spring Boot提供了多种方式来实现动态定时调度,下面介绍两种常用的方式: 1. 使用Spring的TaskScheduler 使用Spring的TaskScheduler可以很容易地实现动态定时调度。示例代码如下: ``` @Component public class MyTask { @Scheduled(cron = "0 0/1 * * * ?") // 每分钟执行一次 public void doTask() { // 任务代码 } } @Service public class TaskService { @Autowired private TaskScheduler taskScheduler; public void scheduleTask(long interval) { taskScheduler.scheduleAtFixedRate(new MyTask(), interval); } public void cancelTask() { // 取消任务 } } ``` 2. 使用Quartz Quartz是一个强大的调度框架,可以轻松实现各种复杂的调度需求。示例代码如下: ``` @Component public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 任务代码 } } @Service public class JobService { @Autowired private Scheduler scheduler; public void scheduleJob(long interval) throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("myJob") .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(interval) .repeatForever()) .build(); scheduler.scheduleJob(jobDetail, trigger); } public void cancelJob() throws SchedulerException { scheduler.deleteJob(new JobKey("myJob")); } } ``` 以上两种方式都可以实现动态定时调度,具体选择哪种方式取决于你的需求和技术栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值