Hutool_定时任务

前言

在写这边文章之前,也du娘过相关文章,大部分都是按照参考文档略作解释就算完了,关键点都没怎么说。。。定时任务在实际的工作当中,不可能全开全停,很多都是后台管理端有个简单的定时任务管理页面,超管可以对定时任务进行部分操作,例如:开启/关闭某个定时任务,一键开启/停止定时任务,说到这儿,前端要展示数据,后端最起码要有个任务列表数据返回吧。。。然。。。看了很多管理Hutool的相关文章,都没有这些,只是简单的介绍了怎么用,怎么开启。。。

简介

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

定时任务

1、引入依赖

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

2、测试类

public class TestJob01 {
    public String execute() {
        System.out.println("-------------------TestJob01任务执行开始-------------------");
        System.out.println(new Date());
        System.out.println("-------------------TestJob01任务执行结束-------------------");
    }    
}

3、通过配置文件来启动定时和任务

对于Maven项目,首先在src/main/resources/config下放入cron.setting文件(默认是这个路径的这个文件),然后在文件中放入定时规则,规则如下:

[com.wlsk.idc.mission.job]
TestJob01.execute=0/2 * * * * ?

中括号表示分组,也表示需要执行的类或对象方法所在包的名字,这种写法有利于区分不同业务的定时任务。
TestJob01.execute表示需要执行的类名和方法名(通过反射调用,不支持Spring和任何框架的依赖注入),0/2 * * * * ?表示定时任务(cron)表达式

4、启动项目

在启动项目添加一个main()方法

public class Application {
    public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
       //支持秒级别定时任务
       CronUtil.setMatchSecond(true);		
       //通过配置文件启动定时任务
       CronUtil.start();
    }
}

start()这个方法只会启动配置文件中的定时任务,动态添加的任务它是不会管的,至于动态添加定时任务,请继续往下看

5、动态添加定时任务

当然,如果你想动态的添加定时任务,使用CronUtil.schedule(String schedulingPattern, Runnable task)方法即可(使用此方法加入的定时任务不会被写入到配置文件,前提是你没有在配置文件配置该方法)。

public class TestJob01 {

    private static String cronString = "*/2 * * * * *";

    private static String scheduleId;

    public String execute() {
        String jobId = CronUtil.schedule(cronString, new Task() {
            @Override
            public void execute() {
                System.out.println("-------------------TestJob01任务执行开始-------------------");
                System.out.println(new Date());
                System.out.println("-------------------TestJob01任务执行结束-------------------");
            }
        });
        if (!StringUtil.isEmpty(jobId)) {
            scheduleId = jobId;
            return jobId;
        } else {
            return null;
        }
    }

    public void remove() {
        CronUtil.remove(scheduleId);
    }
    
}

上面一段的代码中,还有个 == CronUtil.remove(scheduleId) == 这个方法,这个方法是通过CronUtil.schedule()返回的id来进行停止定时任务,准确的说应该是删除任务,== CronUtil.stop() == 这个方法是停止所有任务的,所以一般来说,尽量别用吧,除非对所有定时任务对项目没啥影响,当然,使用stop()作为前端一键停止的按钮还是可以的

6、启动动态添加的定时任务

1)、在启动类中添加,跟随项目启动而启动
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Application.class, args);
        TestJob01 testJob01 = run.getBean(TestJob01.class);
        CronUtil.setMatchSecond(true);
        CronUtil.start();
        testJob01.execute();
    }
}

通过反射拿取TestJob01,然后调用execute();

2)、创建一个定时任务的Controller
/**
 * @author 飞廉少将
 * @program: idc
 * @description: hutool工具类_定时任务_停止
 * @time 2021/3/10
 */
@RestController
@RequestMapping("/admin/hutool/job/")
@Slf4j
@Api(tags = "hutool定时器管理")
public class HutoolCronController {

    @Autowired
    private TestJob01 testJob01;

    @ApiOperation("停止定时任务")
    @GetMapping("hutoolStop")
    public void hutoolStop() {
        CronUtil.stop();
    }

    @ApiOperation("启动test01")
    @GetMapping("hutoolStart")
    public String hutoolStart() {
        return testJob01.execute();
    }

    @ApiOperation("停止test01")
    @GetMapping("hutoolRemove")
    public void hutoolRemove() {
        testJob01.remove();
    }
}

这样可能会有些繁琐,但是如果前端需要一个定时任务列表或者其他的操作,这个controller就可以作为一个对外的接口
这两种动态定时任务的启动方式建议混用,也可能根据实际需求进行调用。。。

7、获取定时任务列表

这个在du娘上没有相关的文章,目前我也正在研究中。。。后面如果我测试没问题了,会把相关代码粘贴上来

Hutool总体来说是个比较好用的工具类,当然,大神肯定有自己的工具类,然而,大神毕竟是少数,多数还是普罗大众啊,哈哈。。。所以,大家可以尝试着用用,目前我所在组没说要用,但是当提前了解了,方便后面好用。。

如果文章对你有所帮助,点个赞吧。。。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值