当前位置: 首页 > news >正文

Spring3定时任务

简介

Spring 内部有一个 task 是 Spring 自带的一个设定时间自动任务调度,提供了两种方式进行配置,一种是注解的方式,而另外一种就是 XML 配置方式了;注解方式比较简洁,XML 配置方式相对而言有些繁琐,但是应用场景的不同,两者又各有优点,所以具体使用还是根据需求来划分;因为任务调度这样的需求,通常改动都是比较多的,如果用注解的方式改动就变得麻烦了,必须去重新编译;所以更多的时候推荐使用XML配置的方式

使用 XML 配置

  1. 定义一个 Task 类,添加一个测试方法
public class Task {public void cron() {System.out.println(new Date() + ", 定时任务执行中 ...");}
}
  1. 在 spring.xml 配置文件中添加如下配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"><!-- 定时任务 --><bean id="task" class="com.review.spring.model.Task"/><!-- 创建任务池 -->   <task:scheduler id="taskScheduler" pool-size="100" /><!-- 定义定时任务 -->   	<task:scheduled-tasks scheduler="taskScheduler"><!-- 表示周一到周五的每分钟的第五秒执行--><task:scheduled ref="task" method="cron" cron="5 * * * * MON-FRI"/></task:scheduled-tasks>
</beans>
  1. 在测试类中初始化容器,定时任务就会自动执行
public class TestTask {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring.xml");}
}

使用注解配置

  1. 定义 Task 类,添加如下代码

public class Task {(cron="0/2 * * * * *") // 每隔 2 秒运行一次public void cron() {System.out.println(new Date() + ", 定时任务执行中 ...");}
}
  1. 在 spring.xml 配置文件中添加如下配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:task="http://www.springframework.org/schema/task"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scan base-package="com.review.spring"/><task:annotation-driven/> <!-- 如果是代码式配置, 需要在配置类添加注解  -->
</beans>

cronExpression 的配置说明
cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义,cron 有如下两种语法格式:

(1) Seconds Minutes Hours DayofMonth Month DayofWeek Year

(2) Seconds Minutes Hours DayofMonth Month DayofWeek(常用)
在这里插入图片描述
在这里插入图片描述
注意:Spring 中的任务调度以及其 ThreadPoolTaskScheduler 中的 cron 表达式是不支持 L W 字符的;所以最后一天和最近的工作日就无法定义在 cron 表达式中

扩展:如何实现每月最后一天执行任务?
方式一:每个月的最后一天,因为不同的月份最后一天是不一样的,但是好在有个范围:28 – 31;那么我们可以结合 cron 表达式 + 代码实现控制每月的最后一天执行任务;代码如下

(cron = "0 0 0 28-31 * ?")
public void execute() {final Calendar c = Calendar.getInstance();// 判断是不是最后一天if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DATE)) {// 你的业务逻辑代码}
}

方式二:在 cron 表达式中,L 表示最后一个的意思,所以可定义为

(cron = "* * * L * ?")

前提是定义的 cron 表达式支持 L W 指定,例如:Quartz 等框架,如果是 Spring 自带定时器则不支持

http://www.lryc.cn/news/9744.html

相关文章:

  • 数据库版本管理工具Flyway应用研究
  • 更换 Ubuntu 系统 apt 命令安装软件源
  • 2023年可见光通信(LiFi)研究新进展
  • Greenplum的两阶段提交
  • 多元回归分析 | CNN-BiLSTM卷积双向长短期记忆神经网络多输入单输出预测(Matlab完整程序)
  • git命令行推送本地分支到远程仓库
  • 在vscode中使用Typescript并运行
  • 【C++提高编程】C++全栈体系(十九)
  • Java版电能表协议解析源码(DL/T645-2007)、Modbus串口虚拟工具、网络串口调试工具分享
  • 2023美赛选题建议 美国大学生数学建模竞赛ABCDEF题
  • 2023,想跳槽的可以再等等
  • Java之滑动窗口详解
  • Webpack(应用一:基本使用,只需六步骤)
  • 【Python小游戏】智商爆棚,推荐一款益智类亲子娱乐首选—某程序员老爸:成语编成填空“游戏”,贪玩女儿1天牢记500词(厉害了我的Python)
  • 使用web3连接Georli测试网络
  • Python uWSGI 的安装配置
  • 033.Solidity入门——20函数的可视范围
  • 智能家居项目(三)之框架设计及框架代码文件工程建立
  • 全网最全的Ansible中常用模块讲解
  • linux程序分析工具
  • Python3,2分钟掌握Doscoart库,你也能成为艺术家。
  • 1225057-68-0,Alkyne PEG4 TAMRA-5,四甲基罗丹明-四聚乙二醇-炔基TAMRA红色荧光染料连接剂
  • Ae:解释素材
  • 无文件攻击
  • JS高级——数据类型
  • 场景案例│数字员工在银行业的典型应用场景,效率及准确率“双高”
  • 2023美国大学生数学建模竞赛选题建议
  • 整合K8s+SpringBoot+gRpc
  • ROS 教程:使用 Moveit C++ 接口进行拾取和放置任务
  • seo细分和切入点