Spring定时任务实现与配置(一)
发布时间 - 2026-01-11 01:59:17 点击率:次朋友的项目中有点问题。他那边是Spring架构的,有一个比较简单的需要定时的任务执行。在了解了他的需求之后,于是提出了比较简单的Spring+quartz的实现方式。

注意本文只是讨论,在已搭建完毕的Spring工程下,完成最简单的定时任务。
第一步,要知道Spring这个架构,很有趣很有意思。可以做到自由插拔功能模块的效果。工程项目是基于MAVEN包依赖管理的,所以把这次需要的依赖包引用列出来:
<!-- 定时器依赖 开始 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <!-- 定时器依赖 结束 -->
当然,这是要跟对应的Spring的版本是要匹配的。我们这里的工程是4.0.2。前一个包spring-context-support,主要的作用是作为Spring与quartz的沟通管理的部件,如果注释掉就会报这样的错误
在MAVEN配置完所需要添加的包之后(其他的包,这里暂时不扩展开说了,本文只讨论在完整Spring工程项目下的配置),我们就可以开始动手给这个项目添加,定时任务的功能模块了。
第二步,从web的项目的起源,web.xml 中改动做起。由于原本的项目Spring的配置文件是Spring-mvc.xml,我这里就把定时任务的配置文件改成了spring-time.xml。这样就可以通过同一个扫描的配置在启动的时候去读取了。具体的代码如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</context-param>
然后给大家看一下我的工程结构:
通过这样的配置,项目就会知道怎么去调用了。实现了这一步接下来我们就可以继续往下走了;
第三步,就是要完成spring-timer.xml这个定时任务的核心配置了。在这个文件配置中,我们主要是完成三件事情:
1.配置启动的设置,关于懒加载(简单说一下,比如把某个变量初始化为null,也是一种懒加载,即在服务启动之后,只有在实际被调用的时候才会实例化,否则是不会在内存中存在的,只是逻辑上的。可以省空间,但是也可能会导致,问题延迟很久才会被发现,此处不再详细解说),以及触发器的配置;
2.quartz-2.x的配置,包含定时任务触发之后要调用的job的名字,以及corn表达式(即定时表达式,控制程序在何时重复执行的原因,本次在会在后续补充关于cron表达式的内容);
3.配置job的内容和job对应的具体的类。
好了逻辑流程解说完毕,上代码:
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 启动触发器的配置开始 -->
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger" />
</list>
</property>
</bean>
<!-- 启动触发器的配置结束 -->
<!-- 调度的配置开始 -->
<!--
quartz-1.8以前的配置
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
-->
<!-- quartz-2.x的配置 -->
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/10 * * * * ?</value>
<!-- <value>1 52 * * * ?</value> -->
</property>
</bean>
<!-- 调度的配置结束 -->
<!-- job的配置开始 -->
<bean id="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myJob" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- job的配置结束 -->
<!-- 工作的bean -->
<bean id="myJob" class="com.tec.kevin.quartz.jobTest" />
</beans>
完成这里的配置文件配置之后,就可以开始下一步,具体的业务逻辑实现了;
第四步,具体业务逻辑实现。
这里要注意的是下图中的两个点
上图是具体的业务实现的类,里面的名字和下图定时任务配置的要相同。
完成上述之后,我们可以启动项目看看实际效果了。
这里可以看到,定时任务按照我们之前在配置中的 <value>0/10 * * * * ?</value> 每10秒执行一次 来运行了。
要注意的是,在实现这个方法的过程中,我遇到了重复执行的情况。就是同一个时间,执行了两次。后来找到的原因是在配置web.xml的时候,重复配置了定时任务,这样导致执行了多次。要是有遇到这个情况的,可以参考我的解决方法。
接来下会有两篇文章,一篇是写定时任务的更简单的实现方法,另外一篇讲解cron 表达式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Spring
# 定时任务
# java中 spring 定时任务 实现代码
# SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法
# 最流行的java后台框架spring quartz定时任务
# Spring Task定时任务的配置和使用详解
# spring 定时任务@Scheduled详解
# 详解Spring整合Quartz实现动态定时任务
# spring中定时任务taskScheduler的详细介绍
# 详解Spring Boot中使用@Scheduled创建定时任务
# Spring整合Quartz实现定时任务调度的方法
# Spring定时任务实现与配置(二)
# 就可以
# 的是
# 配置文件
# 才会
# 要注意
# 会报
# 这是
# 实现了
# 加载
# 就会
# 是在
# 会有
# 好了
# 在这个
# 走了
# 控制程序
# 说了
# 则是
# 其他的
# 两次
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解jQuery中的事件
简历没回改:利用AI润色让你的文字更专业
如何在Ubuntu系统下快速搭建WordPress个人网站?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在万网自助建站平台快速创建网站?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
如何用免费手机建站系统零基础打造专业网站?
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
java获取注册ip实例
Laravel如何实现一对一模型关联?(Eloquent示例)
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何用花生壳三步快速搭建专属网站?
深圳网站制作的公司有哪些,dido官方网站?
如何在万网ECS上快速搭建专属网站?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
如何用PHP工具快速搭建高效网站?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
公司门户网站制作流程,华为官网怎么做?
如何在万网主机上快速搭建网站?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel如何使用withoutEvents方法临时禁用模型事件
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何快速查询网站的真实建站时间?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
HTML 中动态设置元素 name 属性的正确语法详解
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Android实现代码画虚线边框背景效果
Angular 表单中正确绑定输入值以确保提交与验证正常工作
在线制作视频网站免费,都有哪些好的动漫网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Swift中循环语句中的转移语句 break 和 continue
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
高端云建站费用究竟需要多少预算?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
黑客入侵网站服务器的常见手法有哪些?
实例解析angularjs的filter过滤器
Python文件操作最佳实践_稳定性说明【指导】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
企业网站制作这些问题要关注
如何在 Pandas 中基于一列条件计算另一列的分组均值
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?

