Hutool工具类使用

表示不定性更新0.0~~关于介绍什么的可以自行去官网参考,此处单纯使用
以及,概念较多,知道概念的直接点击代码,观看即可
Hutool传送,点击此处

HuTool是什么?

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

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

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

(一)HuTool定时任务概念以及Crontab文件含义

传送门,请点击此处

CronUtil通过一个全局的定时任务配置文件,实现统一的定时任务调度。

配置文件:

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

#执行的类或对象方法所在包的名字
[org.yun.springbootquartz.controller]

#需要执行的类名和方法名
## 每分钟执行一次
TestHutoolCron.TestHutoolCron111 =* */1 * * *

# 每秒执行一次  6位
TestHutoolCron.TestHutoolCron222 =*/1 * * * * *

# 倘若有第二个不同包的定时任务也可以继续添加     []里面的是包名

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

TestHutoolCron.TestHutoolCron222表示需要执行的类名和方法名(通过反射调用,不支持Spring和任何框架的依赖注入),*/10 * * * *表示定时任务表达式,此处表示每10分钟执行一次,以上配置等同于:

org.yun.springbootquartz.controller.TestHutoolCron.TestHutoolCron111 =* */1 * * *
org.yun.springbootquartz.controller.TestHutoolCron.TestHutoolCron.TestHutoolCron222 =*/1 * * * * *

提示 关于表达式语法,点击此处

crontab文件的含义:

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在这里插入图片描述

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

启动:

	CornUtil.start();

如果想让执行的作业同定时任务线程同时结束,可以将定时任务设为守护线程,需要注意的是,此模式下会在调用stop时立即结束所有作业线程,请确保你的作业可以被中断:

	//使用deamon(守护)模式,
	CronUtil.start(true);

关闭:

    CronUtil.stop();

更多选项

秒匹配和年匹配:
考虑到Quartz表达式的兼容性,且存在对于秒级别精度匹配的需求,Hutool可以通过设置使用秒匹配模式来兼容。

//支持秒级别定时任务
CronUtil.setMatchSecond(true);
Copy to clipboardErrorCopied
此时Hutool可以兼容Quartz表达式(5位表达式、6位表达式都兼容)

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

CronUtil.schedule("*/2 * * * * *", new Task() {
    @Override
    public void execute() {
        Console.log("Task excuted.");
    }
});

// 支持秒级别定时任务
CronUtil.setMatchSecond(true);
CronUtil.start();

(一)定时任务代码

  1. pom依赖
 <!--糊涂工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.4</version>
        </dependency>
  1. SpringBootApplication
package org.yun.springbootquartz;

import cn.hutool.cron.CronUtil;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* @ClassName SpringBootQuartzApplication
* @Description TODO
* @Autor 落笔丶
* @Date 2020/4/20 23:49
* @Tel 279611480@qq.com
*/
@SpringBootApplication
public class SpringBootQuartzApplication {

   public static void main(String[] args) {
       SpringApplication.run(SpringBootQuartzApplication.class, args);

       //支持秒级
       CronUtil.setMatchSecond(true);
//        CronUtil.setCronSetting("cron.setting");
       CronUtil.start(true);//开启所有定时任务
   }
}

  1. cron.setting文件
#执行的类或对象方法所在包的名字
[org.yun.springbootquartz.controller]

#需要执行的类名和方法名
## 每分钟执行一次
TestHutoolCron.TestHutoolCron111 =* */1 * * *

# 每秒执行一次  6位
TestHutoolCron.TestHutoolCron222 =*/1 * * * * *

# 倘若有第二个不同包的定时任务也可以继续添加     []里面的是包名
  1. 测试代码
package org.yun.springbootquartz.controller;

import cn.hutool.Hutool;
import cn.hutool.core.date.DateUtil;
import cn.hutool.cron.CronUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import org.junit.Test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.util.Date;

/**
* @ClassName TestHutoolCrom
* @Description 测试Hutool的定时任务
* @Autor 落笔丶
* @Date 2020/4/21 0:22
* @Tel 279611480@qq.com
*/
public class TestHutoolCron {

   private static final Log log = LogFactory.get();
   
   /*
   * crontab文件的含义:
       用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
       minute   hour   day   month   week   command
       其中:
       minute: 表示分钟,可以是从0到59之间的任何整数。
       hour:表示小时,可以是从0到23之间的任何整数。
       day:表示日期,可以是从1到31之间的任何整数。
       month:表示月份,可以是从1到12之间的任何整数。
       week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
       command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
   * */

   public void TestHutoolCron111() {
       log.info("定时任务,11111111111~~~~~~~~~~~~~~" + DateUtil.formatDateTime(new Date()));
   }

   public void TestHutoolCron222() {
       log.info("定时任务,~~~~~~222222" + DateUtil.formatDateTime(new Date()));
   }
}

效果

每秒执行一次 22222的日志打印(日志打印也是使用了Hutool)
22:47:13开始打印

2020-04-21 22:47:13.178  INFO 1684 --- [  hutool-cron-1] o.y.s.controller.TestHutoolCron          : 定时任务,~~~~~~2222222020-04-21 22:47:13
2020-04-21 22:47:14.001  INFO 1684 --- [  hutool-cron-0] o.y.s.controller.TestHutoolCron          : 定时任务,~~~~~~2222222020-04-21 22:47:14
2020-04-21 22:47:15.001  INFO 1684 --- [  hutool-cron-1] o.y.s.controller.TestHutoolCron          : 定时任务,~~~~~~2222222020-04-21 22:47:15
2020-04-21 22:47:16.000  INFO 1684 --- [  hutool-cron-0] o.y.s.controller.TestHutoolCron          : 定时任务,~~~~~~2222222020-04-21 22:47:16

在这里插入图片描述
下一分钟22:48:12会打印11111111111的执行
再下一分钟还是会打印11111111111的执行
在这里插入图片描述

2020-04-21 22:48:12.012  INFO 1684 --- [  hutool-cron-0] o.y.s.controller.TestHutoolCron          : 定时任务,11111111111~~~~~~~~~~~~~~2020-04-21 22:48:12

2020-04-21 22:49:12.001  INFO 1684 --- [  hutool-cron-2] o.y.s.controller.TestHutoolCron          : 定时任务,11111111111~~~~~~~~~~~~~~2020-04-21 22:49:12

在这里插入图片描述
~

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值