使用TimerTask实现定时任务

实现定时任务,需要解决三个问题:

1. 任务是什么,即干什么?

2. 如何执行?什么时候开始执行?执行频率?

3. 使用什么框架执行?这里使用轻量Spring自带的TimerTask进行实现

一、编写任务

新建一个类如MyThread,继承TimerTask,重写run方法

package com.icfcc.cnaps2.thread;

import java.util.TimerTask;

public class MyThread extends TimerTask {
    
    @Override
    public void run() {
        System.out.println("定时任务执行---");
    }
}

二、定时任务的设置

编写定时任务的启动方法,如下:

public void start() {
        Timer timer = new Timer();
        timer.schedule(new MyThread(), 20000,2000);
    }

以上代码Timer类schedule方法的三个参数:

1. 执行run方法的类的实例化,将执行run方法里面的业务代码

2. 调用start方法20秒后启动任务

3. 该定时任务每隔2秒执行一次

三、定时任务执行

使用TimerTask实现定时任务_第1张图片

这种方式执行定时任务,本人遇到过run()方法中用到的bean无法注入的问题,网上找了一下,参考这篇博客解决了,链接:Timer定时器中的service不能用的解决办法_定时任务中不允许调用service-CSDN博客文章浏览阅读883次。问题:service在平常的controller中可以用,但是在定时器的run方法中不能用。原因:定时器继承了TimerTask之后,在定时器调用此方法后会直接执行execute方法,来不及执行@Autowired标注进行注入。引入ApplicationContextUtil的工具类:import org.springframework.beans.BeansException;..._定时任务中不允许调用servicehttps://blog.csdn.net/weixin_43748216/article/details/89373014
获取bean的方式换成这个:ApplicationContextUtil.getContext().getBean("bean名称");就可以了

 

 

你可能感兴趣的:(java,开发语言)