Spring 中使用Quartz实现任务调度
发布时间 - 2026-01-10 23:05:02 点击率:次前言:Spring中使用Quartz 有两种方式,一种是继承特定的基类:org.springframework.scheduling.quartz.QuartzJobBean,另一种则不需要,(推荐使用第二种)。下面分别介绍。

1、作业类继承 org.springframework.scheduling.quartz.QuartzJobBean
第一步:定义作业类
java代码
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean{
//这个参数值由xml配置传过来
private int timeout;
public void setTimeout(int timeout) {
this.timeout = timeout;
}
@Override
protected void executeInternal(JobExecutionContext content) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + "job1执行" + "这是xml里给timeout赋值" + timeout);
}
}
第二步spring中配置JobDetailBean
spring.xml配置代码
<bean id = "job1" class="org.springframework.scheduling.quartz.JobDetailBean">
<!-- 这里指向写好的作业类 -->
<property name="jobClass" value="com.ccg.job.Job1" />
<property name="jobDataAsMap">
<map>
<!-- 这里写参数可以传到作业类中定义的参数 -->
<entry key="timeout" value="10"></entry>
</map>
</property>
</bean>
第三步配置触发方式
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean ,按照一定频率执行任务
org.springframework.scheduling.quartz.CronTriggerBean ,支持cron表达式,可以指定时间执行,也可以按照频率执行
第一种 SimpleTriggerBean,比如每两秒执行一次,xml配置如下:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job1" /> <property name="startDelay" value="10000" /><!--调度工厂实例化后,经过10秒开始执行调度--> <property name="repeatInterval" value="2000" /><!--每2秒调度一次--> </bean>
第二种 CronTriggerBean,比如每天12点执行,xml配置如下:
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job1" /> <property name="cronExpression" value="0 0 12 * * ?" /> <!-- 每天12天执行任务 --> </bean>
Cron表达式格式最后面介绍。
第四步配置调度工厂
spring.xml配置代码如下:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
<!-- <ref bean="cronTrigger"/> -->
</list>
</property>
</bean>
第五步启动应用,查看任务调度执行情况。
2、作业类不需要继承,只是普通的java类
主要的类是org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean ,下面是代码:
第一步作业类
import java.text.SimpleDateFormat;
import java.util.Date;
public class Job2 {
public void run(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + "这里是job2的执行");
}
}
第二步在spring.xml中配置job2
<bean id = "job2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" > <bean class="com.ccg.job.Job2" /> </property> <property name="targetMethod" value="run"></property> <property name="concurrent" value="false" /><!-- 作业不并发调度 --> </bean>
targetObject 执行作业类 targetMethod指向作业类中要执行的方法
第三步配置触发方式,同样是有两种一种SimpleTrggerBean,一种CronTrggerBean
第一种配置xml如下:(每2秒执行一次)
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job2" /> <property name="startDelay" value="10000" /> <property name="repeatInterval" value="2000" /> </bean>
第二种配置xml如下:(每天12点执行)
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job2" /> <property name="cronExpression" value="0 0 12 * * ?" /> </bean>
第四步配置调度工厂
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean>
如果使用CronTriggerBean 需要把simpleTrigger 换成simpleTrigger
最后启动服务,查看任务调度执行情况。
附:Cron表达式
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year//或 Seconds Minutes Hours DayofMonth Month DayofWeek
每一个域可出现的字符如下:
- Seconds:可出现", - * /"四个字符,有效范围为0-59的整数
- Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
- Hours:可出现", - * /"四个字符,有效范围为0-23的整数
- DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
- Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
- DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
- Year:可出现", - * /"四个字符,有效范围为1970-2099年
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 任务调度
# quartz
# spring实现任务调度
# java
# Java中的任务调度框架quartz详细解析
# Java 任务调度框架 Quartz实操
# springboot+Quartz实现任务调度的示例代码
# 关于任务调度框架quartz使用(异常处理
# 解决恢复后多次调度处理)
# 第二种
# 不需要
# 两种
# 有两种
# 第二步
# 第一种
# 第三步
# 执行情况
# 类中
# 第四步
# 是一个
# 这是
# 是有
# 推荐使用
# 写好
# 大家多多
# 星期天
# 第五步
# springframework
# mm
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云部署织梦网站?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
javascript读取文本节点方法小结
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
javascript中闭包概念与用法深入理解
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
网易LOFTER官网链接 老福特网页版登录地址
Python正则表达式进阶教程_复杂匹配与分组替换解析
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何快速打造个性化非模板自助建站?
如何挑选最适合建站的高性能VPS主机?
🚀拖拽式CMS建站能否实现高效与个性化并存?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
如何在云主机上快速搭建多站点网站?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何在腾讯云服务器快速搭建个人网站?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
网站建设整体流程解析,建站其实很容易!
原生JS实现图片轮播切换效果
如何快速启动建站代理加盟业务?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
大同网页,大同瑞慈医院官网?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何用PHP工具快速搭建高效网站?
Laravel如何升级到最新版本?(升级指南和步骤)
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Android使用GridView实现日历的简单功能
如何快速使用云服务器搭建个人网站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何在宝塔面板中创建新站点?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何在阿里云购买域名并搭建网站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
SQL查询语句优化的实用方法总结
如何快速辨别茅台真假?关键步骤解析
详解jQuery中基本的动画方法
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
JS去除重复并统计数量的实现方法

