使用spring quartz实现定时任务

Spring Boot中如何使用@Scheduled和Quartz实现定时任务? 🏆本文收录于《滚雪球学Spring Boot》,专门攻坚指数提升,2025 年国内最系统+最强(更新中)。    本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。 阅读详情

使用spring quartz实现定时任务

需求:

一个功能模块需要 定时执行  如:每天0点执行某操作  每1小时执行某操作

使用spring quartz实现定时任务

复制代码
/**
 * 自动修改订单状态为拒签待外呼
 * 3天内,系统将自动将“拒签已退货”的订单状态变为“拒签待外呼”
 * @author jokey
 *
 */
//实现QuartzJobBean  org.springframework.scheduling.quartz.QuartzJobBean;

public class AutoChangeOrderStatusWithWaitCall extends QuartzJobBean {
    private IOrderService orderService;

//重写其默认执行的方法
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        System.out.println((new Date())+"****start: 执行拒签已退货超过三天数据转为拒签待外呼");
        orderService.changeOrderStatusWithWaitCall();
        System.out.println((new Date())+"****end: 执行拒签已退货超过三天数据转为拒签待外呼");
        
    }

    public void setOrderService(IOrderService orderService) {
        this.orderService = orderService;
    }

}
复制代码

Spring配置定时器 以及触发器

复制代码
<!--每3个小时更新超过三天未从拒签已退货转到拒签待外呼数据   -->
  <bean id="AutoChangeOrderStatusWithWaitCallTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">    //工作类
            <ref bean="AutoChangeOrderStatusWithWaitCallJob" />
        </property>
        <property name="cronExpression">//表达式 执行周期
            <!-- 0 0 0/3 * * ? -->
            <value>0 * * * * ?</value>
        </property>
    </bean>
    <bean id="AutoChangeOrderStatusWithWaitCallJob" class="org.springframework.scheduling.quartz.JobDetailBean">

       //配置工作类
        <property name="jobClass" value="com.xwtech.xwout.quartzjob.AutoChangeOrderStatusWithWaitCall" />
       //配置注入的字段  此处未配置orderService的注入配置 

        <property name="jobDataAsMap">
            <map>
                <entry key="orderService">
                    <ref bean="orderService"/>
                </entry>
            </map>
       </property>
    </bean>


 <!-- 总调度  --> 
   <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>    
                <ref bean="AutoChangeOrderStatusWithWaitCallTrigger"/>
            </list>
        </property>
        <!-- <property name="autoStartup" value="${quartz.autoStartup}"/> -->
    </bean>
复制代码

 

另外一个写法

复制代码
@Service("studentService")
public class StudentServiceImpl implements IStudentService {
    private IBaseDao baseDao;
    
    
    
    public int addStudent(Student stu) {
        String sql = "insert into student values (null,?,?)";
        return baseDao.execute(sql, new Object[]{stu.getName(),stu.getStatus()});
    }

    public void updateStudentStatus() {
        String sql = "update student s set s.status=? where s.id=?";
        System.out.println((new Date())+"执行了定时任务");
        //baseDao.execute(sql, new Object[]{stu.getStatus(),stu.getId()});
    }

    
    
    
    @Resource
    public void setBaseDao(IBaseDao baseDao) {
        this.baseDao = baseDao;
    }

}
复制代码

 

复制代码
 <!-- studenetService已经注解驱动  此处不需要声明 -->
    
    <!--定义定时执行studentService 这个bean中的updateStudentStatus()方法-->
 <bean id="doJob"   class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
 <!--你要执行的那个方法对应的bean-->
        <property name="targetObject">  
            <ref bean="studentService" />  
        </property>   
<!--你要执行那个方法,注意方法不能有返回值,参数好像也不能有-->
        <property name="targetMethod"> 
            <value>updateStudentStatus</value>  
        </property>  
    </bean>
    
    
     <!--触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是searchEngerneTask,即触发器去触发哪个bean..并且我们还定义了触发的时间-->   
    <bean id="cronTrigger"  
        class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail">  
            <ref bean="doJob" />  
        </property>  
        <property name="cronExpression">   
            <!-- 关键在配置此表达式,时间设置这里表示每天在下午2:00至2:59之间每1分钟触发一次 ,最后也写出了一些,具体可以自己去找资料看 -->   
            <value>* * 2 * * ?</value>  
        </property>  
    </bean>   
   
    <!--管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。   
    -->   
    <bean autowire="no"  
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="cronTrigger" />  
            </list>
        </property>
    </bean>   
复制代码

 

 

 

 

 

 1.秒2.分3.小时4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099) 
      秒 0-59 , - * /
  分 0-59 , - * /
     小时 0-23 , - * /
     日 1-31 , - * ? / L W C
     月 1-12 or JAN-DEC , - * /
     周几 1-7 or SUN-SAT , - * ? / L C #
     年 (可选字段) empty, 1970-2099 , - * /
可用值详细分析如下:
“*”——字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
“?”——字符可以用在“日”和“周几”字段. 它用来指定 '不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。
“-”——字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点"。
“,”——字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。
“/”——字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和 45秒"。而 "5/15"则表示"第5, 20, 35, 和 50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。
“L”——字符可用在“日”和“周几”这两个字段。它是"last"的缩 写, 但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" —— 对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" —— 比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。
“W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周 五) 。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。
“L”和“W”可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。
“#”—— 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" = 表示该月第一个周一而 "4#5" = 该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。
“C”—— 字符可用于“日”和“周几”字段,它是"calendar"的缩写。 它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。

    

如:

<property name="cronExpression" value="0 0 0/4 * * ?"/> 代表每隔4小时执行任务

<property name="cronExpression" value="0 0 7 * * ?"/> 代表每天上午7点执行任务

分类:  Java
标签:  spring,  定时任务
使用Spring Quartz实现定时任务 记得根据自己的实际需求调整时间表达式,以满足定时任务的执行频率和时间点要求。Spring Quartz是一个功能强大的调度框架,用于在Java应用程序中执行定时任务。下面将详细介绍如何使用Spring Quartz编写和配置定时任务,并附上相应的源代码。最后,在Spring Boot应用程序的入口类上添加@EnableScheduling注解,以启用定时任务的调度功能。然后,在Spring的配置文件中配置Quartz的相关内容。现在,当应用程序启动后,定时任务将按照配置的时间表达式执行。 阅读详情

相关推荐

Spring Boot的定时任务与调度:使用@Scheduled和Quartz实现自动化任务!

🏆本文收录于《滚雪球学Spring Boot》,专门攻坚指数提升,2025 年国内最系统+最强(更新中)。    本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 1520

springboot整合quartz定时任务

quartz简介:查看Quartz简介 springboot整合quartz,实现: 1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 2.配置文件加入以下配置: #quartz #自启动,false则不执

User_jing的博客 2147

U型槽微带贴片天线:从理论公式到带宽扩展实战

本文深入探讨了U型槽微带贴片天线的设计与带宽扩展实战。针对传统微带天线带宽窄的痛点,详细解析了通过引入U型槽形成双谐振点以拓宽带宽的原理,并提供了从MATLAB理论计算、ANSYS HFSS仿真建模到参数优化的一站式工程指南。文章还分享了多种带宽扩展组合技巧及仿真与实测避坑经验,助力射频工程师设计出高性能的宽带微带天线。

weixin_29168153的博客 447

2021-2-7[ springboot 集成Quartz定时任务 ]

引包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 相关配置 # spring boot 已集成Quartz,无需自己配置 #是否应用启动时,自动启动定.

AoLuo的博客 1023

电脑的kernelbase.dll故障怎么处理?kernelbase.dll是什么文件

kernelbase.dll​是一个系统文件,属于Microsoft Windows操作系统的一部分。该DLL(动态链接库)文件包含了许多基本且低级的系统函数,这些函数被Windows上运行的各种程序和进程调用。kernelbase.dll通常与Kernel32.dll紧密相关,它是实现许多Windows API(应用程序编程接口)的封装。这些API涉及到内存管理、输入输出操作、进程和线程管理以及其他许多核心的操作系统功能。

电脑修复君的博客 4533

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9002

spring quartz 开发环境不启动定时任务问题探究

项目中使用了springboot加quartz进行定时任务的管理及配置,但开发环境是不需要启动定时任务的,可能会造成定时任务对数据处理的异常。

qq_42809802的博客 3451

华为项目TR5评审后发现了重大缺陷的应急处理经验

华为TR5评审后发现重大缺陷时,启动分级应急机制:1)缺陷分级:按严重性(致命/严重/一般)评估影响;2)应急响应:跨部门会议制定方案,冻结生产并调配资源;3)根因修复:通过RCA定位问题,设计变更后回归测试;4)变更管理:评审修复影响,调整发布策略;5)持续改进:记录缺陷闭环,优化流程。案例显示,软件闪退问题通过热修复补丁和代码重构解决。关键工具包括Jira、FMEA等,确保缺陷在量产前拦截,降低风险。

从技术实践立足,从项目管理方法论延伸思考 1069

Spring 定时任务quartz配置及代码示例详解

前段时间做公司项目,有个需求定期清理一些超过时限的文件。 谈到处理定时任务,quartz应该是目前比较成熟,使用较为广泛的java任务调度框架了,功能强大配置灵活,在企业应用中占重要地位。现在就跟大家一起学习下如何在项目中使用quartz。 首先了解下Quartz的背景     Quartz是opensymphony组织专攻job scheduling领域又一个开源利器,可以到http://

chndata的专栏 1591

苍穹外卖项目面试总结话术

美食速递这个项目最初是我参与制作的大创项目,是一款为中南学生提供校园外卖送至宿舍服务的软件,包含系统管理后台和小程序端两部分。其中系统管理后台主要提供给食堂内部员工使用,可以对食堂各个窗口、员工、订单、菜品等进行维护管理;小程序端可以在线浏览菜品、添加购物车、下单等,由学生兼职做跑腿送餐上门服务。这是个前后端分离的项目,我主要是负责后端的用户登录、员工管理,菜品管理,订单管理模块的编码实现。

qq_45195447的博客 1万+

Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案

【代码】Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案。

2401_86789230的博客 2万+

定时器

/** 定时器配置 */ @EnableScheduling @Configuration public class SchedulerConfig { public static final String TARGET_METHOD = "execute"; /** * 康明斯UDS定时表达式 */ @Value("${spring.quartz.auto-startup}") pri...

weixin_43524361的博客 376

STM32CUBEIDE调试中HardFault_Handler崩溃的故障分析器实战解析

本文详细解析STM32CUBEIDE调试中HardFault_Handler崩溃问题的实战处理方法。通过内置故障分析器自动诊断硬件异常原因,如内存越界、堆栈溢出等,提供图形化界面简化调试流程,并分享配置步骤、典型案例及高级调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。

night的博客 643

spring 使用 quartz 实现定时任务

spring 使用 quartz 实现定时任务

快乐的小三菊的博客 5186

【嵌入式DIY实例-Arduino篇】-脉搏传感器监测脉搏率 (BPM)及可视化

在本文中,我们将使用 Arduino 和脉搏传感器来测量心率 (BPM)。 在文章中,我们将向展示如何使用脉搏传感器测量您的心率(每分钟心跳次数),并在电脑上位机通过Processing来实现心率数据可视化。同时使用LCD16×2 显示屏显示脉搏率 BPM。 该传感器易于使用和操作。 只需将手指放在传感器顶部,它就会测量心跳变化。

视觉与物联智能 834

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[整理]在Spring MVC中使用Quartz实现定时任务动态管理

动态管理项目中的定时任务。

码U、me的专栏 6658

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用Spring3+Quartz实现定时任务

在本文中,我们使用Spring3+Quartz实现定时任务。spring中定义了一些接口来支持Quartz,可以使你的业务逻辑类和Quartz解耦。 这个例子中使用了如下maven的依赖项: <dependencies> <!--Spring3depend...

chenghuo9876的博客 173

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

spring使用Quartz实现定时任务

在项目中,定时实现某个任务是经常遇到的事情。在企业级的项目中,Quartz这一框架能够很好的帮我们完成定时任务。Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-li

riyunzhu的专栏 3181

使用Spring+Quartz实现定时任务

一、所需jar包1、若quartz-all.jar版本为2.x,则spring版本必须为3.1以上。2、若spring版本为3.0之前,则只需spring.jar、quartz-all-1.x.jar、jta.jar、commons-collections-3.1.jar3、若spring版本为3.0之后,且quartz-all.jar版本为1.x,则springjar文件需要以下jar包: spr

Aurora Silent 1153

spring中使用quartz实现定时任务

1.利用JobDetailBean类来配置JobDetail的BEAN类,引用需要执行的任务,作为需要执行的程序 2.利用SimpleTriggerBean类或者CronTriggerBean配置Trigger的BEAN类,其中引用1中定义的bean,作为应用的定时器 3.利用ScheduleFactoryBean类配置scheduler的bean类,注册2中定义的定时器 <bea

mydreamongo的专栏 771

使用Spring + quartz实现定时任务调度

Spring + Quartz实现定时任务调度

凤歌 802

在Spring中使用Quartz实现定时任务

今天在开发中遇到定时任务的问题,最初尝试在web.xml中配置一个Timer监听器来实现,但是,又和Jbpm的定时任务相冲突,请教公司一高手,说:用这个方式是不提倡的,最好用spring来实现。 方法如下: XML配置如下: [code="java"] ...

iteye_20487的博客 162

spring里面使用quartz实现定时任务

spring配置文件进行配置 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmln

IT程序员的成长记 311

spring 中使用quartz实现定时任务

一般开发系统,使用定时任务非常常见。当然也可以用Java实现。比如定时器。大致如下: 1: public static void main(String[] args) { 2: Timer timer = new Timer(); 3: timer.schedule(new java.util.TimerTask() { 4: ...

weixin_30699463的博客 93
上一篇: 发送手机短信获取验证码功能
下一篇: Error in XmlSqlMapClientBuilder. Alias name conflict occurred.
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值