java spring+quartz定时

Quartz是基于Java的任务调度框架,支持嵌入式运行、参与事务、集群部署等多种方式。核心组件包括Scheduler、Trigger和Job。Spring环境下可通过相应FactoryBean进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目。读者可以到 http://www.quartz-scheduler.org/站点下载 Quartz 的发布版本及其源代码。

Quartz优点是:

1、能嵌入到任何独立的应用中运行

2、能在应用服务器或者Servlet 容器中实例化,并且能够参与XA事务。

3、能够以独立的方式运行(在它自己的Java 虚拟机中),可以通过RMI 使用Quartz。

4、可以被实例化为独立程序的集群(有负载均衡和容错能力)。

Quartz 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger 和 job 是任务调度的元数据, scheduler 是实际执行调度的控制器。

Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。

Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多,本文主要介绍这种方式。CronTrigger在spring中封装在CronTriggerFactoryBean中。

job 用于表示被调度的任务。主要有两种类型的 job:无状态的(stateless)和有状态的(stateful)。对于同一个 trigger 来说,有状态的 job 不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。Job 主要有两种属性:volatility 和 durability,其中 volatility 表示任务是否被持久化到数据库存储,而 durability 表示在没有 trigger 关联的时候任务是否被保留。两者都是在值为 true 的时候任务被持久化或保留。一个 job 可以被多个 trigger 关联,但是一个 trigger 只能关联一个 job。

一、配置xml

<!-- 定时任务 start -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

       <!--被调度的任务-->

 <property name="jobClass" value="com.css.job.QueryJob"></property>

   <!--durability 表示在没有 trigger 关联的时候任务是否被保留-->

        <property name="durability" value="true" />
    </bean>
    <!--用于定义任务调度的时间规则-->
    <bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"></property>
        <property name="cronExpression" value="0 */2 * * * ? "></property>
    </bean>
    <!--执行调度的控制器。-->
    <bean id="trigger" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTriggerBean"/>
            </list>
        </property>
    </bean>

二、用法说明

第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。

public class QueryJob extends QuartzJobBean {
   
    /**
     * 要调度的具体任务
     */
    public void query() {
        new dController().data(mapper);
    }
    
    /**
     * executeInternal方法这个方法是在时间到来时自动执行的方法,
     * 在executeInternal(JobExecutionContext)方法中书写自己想要执行的方法体。
     */
    @Override
    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
        query();
        
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值