Spring调度scheduler

Spring scheduler调度计划

Spring调度类似Quartz机制,Quartz是一个非常有用的库,适用于具有更复杂调度要求的应用,而Spring的调度只需要一个@Scheduled,加入任何一个你需要定时执行的方法,并使用linux cron格式写入时间,其余都是SpringBoot自己来照顾执行,Spring Boot在内部使用该 TaskScheduler
接口来调度带注释的执行方法。

只需将@EnableScheduling注释添加到主应用程序类或其中一个配置类,即可启用调度@Scheduled标注的方法,注意一共是两个步骤:@EnableScheduling 和 @Scheduled 分别标注。

如下:

@SpringBootApplication
@EnableScheduling
public class SpringbatchApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringbatchApplication.class, args);
   }
}

我们以前面的SpringBatch为案例,我们希望定期执行这个批处理转换,那么只要在@Configuration类中加入调用计划方法:

@Autowired
   private Job importUserJob ;

   // This job runs in every 5 seconds
   @Scheduled(fixedRate = 5000)
   public void printMessage() {
      try {
         JobParameters jobParameters = new JobParametersBuilder().addLong(
               "time", System.currentTimeMillis()).toJobParameters();
         jobLauncher.run(importUserJob, jobParameters);
         System.out.println("I have been scheduled with Spring scheduler");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

其中importUserJob是我们Spring batch的导入User数据的Job,我们新增了方法printMessage,然后定义了@Scheduled(fixedRate = 5000),5秒执行一次importUserJob这个任务。

其他调度写法:

@Scheduled(cron = "0 * * * * ?")

上面是每分钟执行一次任务。

默认情况下,所有@Scheduled任务都在Spring创建的大小为1的默认线程池中执行。我们可以创建自己的线程池并配置Spring以使用该线程池来执行所有计划任务:

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
   private final int POOL_SIZE = 10;

   @Override
   public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
      ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

      threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
      threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
      threadPoolTaskScheduler.initialize();

      scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
   }
}

这就是配置Spring以使用自己的线程池而不是默认线程池所需要做的全部工作。

Spring Batch

原文 

https://www.jdon.com/springboot/spring-scheduling.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring调度scheduler

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址