1、所有的系统开发里面定时调度绝对是一个核心的话题,对于定时调用的实现在实际开发之中可以使用:TimerTask,Quartz,SpringTask配置,实际上这里面最简单的配置就是Spring自己所提供的Task处理。如果要想实现定时调度,只需要配置一个定时调度的组件类即可:package com.gwolf.task;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import java.time.Instant;@Componentpublic class MyScheduler { @Scheduled(fixedRate = 2000) //采用间隔调用 public void runJobA() { System.out.println("[MyTaskA-间隔调度***" + Instant.now()); } @Scheduled(cron = "* * * * * ?") public void runJobB() { System.err.println("[MyTaskB-定时调度调度***" + Instant.now()); }}
2、如果现在要想执行此任务,那么还需要有一稍僚敉视个基本的前提:你的程序启动类上一定要启用调度处理。package com.gwolf;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.embedded.EmbeddedServletContainer;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication //启动SpringBoot程序,而后自带子包扫描。@EnableTransactionManagement@EnableSchedulingpublic class StartSpringBootMain { public static void main(String[] args) { SpringApplication.run(StartSpringBootMain.class, args); }}
3、启动程序运行主类,查看程序的执行结果:
4、这个时候所实现的任务调用只是串行任务调度,也就是说所有的任务时候一个一个的执行的处理方式,那么如果现在有一个任务所花费的时间特别的畅,则其他的任务都会挤压,实际开发之中很明显这种处理是不可能存在。
5、如果要想启动并行的调度处理,则一定要准备出一个线程调度池,进行一个线程调度的配置类:package com.gwolf.config;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import java.util.concurrent.Executors;@Configurationpublic class SchedulerConfig implements SchedulingConfigurer{ //开启一个线程调度池 @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(Executors.newScheduledThreadPool(100)); }}
6、在以后所编写的定时任务调用的时候一定要准备好一个线程池,这样才可以让多个任务并行执行。