您的位置 首页 java

hutool之定时任务

前言

Java 中定时任务使用的最多的我想就是 quartz 了,但是这个框架太过庞大,而且我也不需要用到这么多东西,使用方法也是比较复杂 。

Hutool的定时任务模块与 Linux Crontab 使用上非常类似,通过一个 cron.setting 配置文件,简单调用start()方法即可简单使用。

以上是官网原话

使用

1.引入以下依赖

 <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.8</version>
</dependency>  

2.配置文件

对于 Maven 项目,首先在 src/main/resources/config 下放入cron.setting文件

 # 我是注释
[com.company.aaa.job]
TestJob.run = */10 * * * *
TestJob2.run = */10 * * * *  

中括号表示分组,也表示需要执行的类或对象方法所在包的名字,这种写法有利于区分不同业务的定时任务。

TestJob.run 表示需要执行的类名和方法名

3.启动

 public  static   void  main(String[] args) {
    try {
        ConfigurableApplicationContext context = SpringApplication.run(HoiApplication.class, args);
        
        //支持秒级别定时任务
        CronUtil.setMatchSecond(true);
        //启动
        CronUtil.start();
    }catch ( Exception  e){
        e.printStackTrace();
    }
}  

踩坑

先看看TestJob的内容

 public class TestJob{
    @Resource
    UserService userService;
    
    public void run(){
        userService.updateStatus(userId);
    }
}  

结果发现运行程序报错,原因是不支持依赖注入,无法使用updateStatus

解决方式如下:

新建一个SpringBeanUtil工具

 @Component
public class  Spring BeanUtil {
     private  static ConfigurableApplicationContext applicationContext = null;

    public static void setApplicationContext(ConfigurableApplicationContext context) {
        if (null == SpringBeanUtil.applicationContext) {
            SpringBeanUtil.applicationContext = context;
        }
    }

    public static ConfigurableApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    public static<T> T getBean(Class<T> cls) {
        return getApplicationContext().getBean(cls);
    }

}  

修改启动类

 public static void main(String[] args) {
    try {
        ConfigurableApplicationContext context = SpringApplication.run(DlApplication.class, args);
        SpringBeanUtil.setApplicationContext(context);
        //支持秒级别定时任务
        CronUtil.setMatchSecond(true);
        CronUtil.start();
    }catch (Exception e){
        e.printStackTrace();
    }
}  

再次调整TestJob

 public class TestJob{
    
    public void run(){
        ConfigurableApplicationContext context = SpringBeanUtil.getApplicationContext();
         if  (!Objects.isNull(context)){
            UserService userService = context.getBean(UserService.class);
            userService.updateStatus(userId);
        }
    }
}  

文章来源:智云一二三科技

文章标题:hutool之定时任务

文章地址:https://www.zhihuclub.com/179685.shtml

关于作者: 智云科技

热门文章

网站地图