目录
普通定时器任务
- public class TimerTaskApp {
- public static void main(String[] args) {
- Timer timer = new Timer();
-
- TimerTask timerTask = new TimerTask() {
- @Override
- public void run() {
- System.out.println("66666666");
- }
- };
-
- timer.schedule(timerTask,0,3000);
-
-
- }
- }
可以将下图看做四步
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-quartz</artifactId>
- </dependency>
- public class MyQuartz extends org.springframework.scheduling.quartz.QuartzJobBean {
-
- // 因为QuartzJobBean类是一个抽象类,所以这里我们要实现抽象方法
-
- /**
- * 定义具体要执行的任务
- * @param jobExecutionContext
- * @throws JobExecutionException
- */
- @Override
- protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
- System.out.println("运行了运行了6666");
- }
- }
-
- @Configuration
- public class QuartzConfig {
-
- /**
- * 绑定具体的工作
- * @return
- */
- @Bean
- public JobDetail printJobDetail(){ //JobDetail这是一个接口
- // 创建MyQuartz.class类对应的工作,就会运行MyQuartz.class类中的executeInternal方法
- // storeDurably() 持久化存起来,一定要加上
- return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
- }
-
- /**
- * 绑定具体的工作明细
- * 触发器
- * @return
- */
- @Bean
- public Trigger printJobTrigger(){
- // 设置一个定时器
- ScheduleBuilder scheduleBuilder =CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
- // 使用forJob将触发器和具体的工作绑在一起 withSchedule执行周期
- return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
-
-
-
-
- }
- }
上面的代码虽然可以实现,但是比较的麻烦,因为有一个工作的话,就需要一个JobDetail
针对上述的麻烦,我们可以看下面的 整合Task
- @SpringBootApplication
- @EnableScheduling //开启定时任务功能
- public class
- Springboot23TaskApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(Springboot23TaskApplication.class, args);
- }
-
- }
-
- @Component //定义成bean
- public class MyBean {
-
- @Scheduled(cron = "0/1 * * * * ?")
- public void print(){
- System.out.println("spring task run.....");
- }
-
- }
我们可以对比上面的两种使用方式,发现下面的这种代码更简洁,效率会更快,尽量掌握下面这种形式的