利用ScheduledExecutorService实现定时任务

来源:互联网 发布:我的世界0.14js大全 编辑:程序博客网 时间:2024/09/21 09:21

ScheduledExecutorService是java并发包下提供给我们实现定时任务的工具。
利用它,我们能轻松的实现定时任务。

/** * 定时刷新token * @author Mingchenchen */@Componentpublic class RefreshToken {    private static Logger logger = Logger.getLogger(RefreshToken.class);    @PostConstruct    public void init(){        logger.info("定时任务启动:20分钟刷新一次token");        //此处如果间隔很短则需要注意并发性 如果任务执行时间>delay时间则存在并发问题        //schedule()则不会 它是任务完成后的XX分执行下一次 而scheduleAtFixedRate是固定的间隔执行         ScheduledExecutorService service = Executors                .newSingleThreadScheduledExecutor();         service.scheduleAtFixedRate(getLogginDmsRunner(), 0, 20, TimeUnit.MINUTES);    }    /**     * 登录获取token     * @return     */     private static Runnable getLogginRunner(){         return new Runnable() {              public void run() {                logger.info("定时任务开始执行:登录");                UserLoginInfoVo userLoginInfoVo = new UserLoginInfoVo();                userLoginInfoVo.setUserName("foo");                userLoginInfoVo.setPassWord("bar");                LoginUtil.login(userLoginInfoVo);                //结果存入缓存                logger.info("定时任务执行完毕:token = " + userLoginInfoVo.getToken());              }            };     }}

需要注意的一点:
此处把它配置成了@Compoment 然后在public void init(){}方法里面启动定时任务,并注解了
@PostConstruct,让spring在构造之前初始化。
即在服务启动的时候就会执行init方法把定时任务启动起来。

之前我是用的static块,然后忘记了加上@compoment导致没有执行。

结果:
这里写图片描述

0 0
原创粉丝点击