Spring 石英调度

本文深入探讨了使用Spring框架结合Quartz库实现定时任务的两种方式:继承式和非继承式。通过示例代码演示如何创建JobDetail、Trigger和Scheduler,实现定时执行特定任务。

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

一、继承式Quartz定时器

1.创建一个继承自QuartzJobBean的类,并重写executeInternal方法
public class MyJob extends QuartzJobBean{
 
   private int timeout;
    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        System.out.println("现在时间为: " + (new Date()));
    }
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }
}

2.创建调度器JobDetailBean
<bean id="jobDetail"
    class="org.springframework.scheduling.quartz.JobDetailBean">
    <!--指定调度器的jobClass属性的值为QuartzJobBean的子类-->
    <property name="jobClass">
        <value>com.my.pojo.MyJob</value>
    </property>
    <!--设置开启时间-->
    <property name="jobDataAsMap">
        <map>
            <entry key="timeout" value="0"></entry>
        </map>
    </property>
</bean>

3.创建调度触发器CronTriggerBean
<bean id="trigger"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <!--将调度器赋值给触发器的jobDetail属性-->
    <property name="jobDetail" ref="jobDetail"></property>
    <!--设置定时时间-->
    <property name="cronExpression">
        <value>0-59 * * * * ?</value>
    </property>
</bean>

4.创建触发器调度工厂SchedulerFactoryBean
<bean
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref local="trigger"/>
        </list>
    </property>
</bean>

####测试类
public static void main(String[] args) throws SchedulerException {
    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:container.xml");
    JobDetail job = (JobDetail) ac.getBean("jobDetail");
    CronTriggerBean trigger = (CronTriggerBean) ac.getBean("trigger");
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    scheduler.scheduleJob(job, trigger);
    scheduler.start();
}



二、非继承式Quartz定时器

1.声明作业类MyJob
<bean id="job" class="com.my.pojo.MyJob"></bean>
public class MyJob {
    public void doJob(){
        System.out.println("现在时间为: " + (new Date()));
    }
}
此类可以是任意类型的类

2.配置作业类MethodInvokingJobDetailFactoryBean
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!--将之前声明的要运行的类赋值给此类的targetObject属性-->
    <property name="targetObject" ref="job"></property>
    <!--指定目标类中被管理的方法,对应属性名为targetMethod-->
    <property name="targetMethod" value="doJob"></property>
</bean>

3.配置触发器CronTriggerBean
<bean id="trigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
    <!--将作业类管理器交与触发器管理-->
    <property name="jobDetail" ref="jobDetail"></property>
    <!--设置触发器运行的时间-->
    <property name="cronExpression">
        <value>1-50 * * * * ?</value>
    </property>
</bean>

4.配置调度工厂SchedulerFactoryBean
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <!--将触发器交与调度工厂管理-->
    <property name="triggers">
        <list>
            <ref local="trigger"/>
        </list>
    </property>
</bean>

####测试类
public static void main(String[] args) throws SchedulerException {
    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:container.xml");
    JobDetail job = (JobDetail) ac.getBean("jobDetail");
    CronTriggerBean trigger = (CronTriggerBean) ac.getBean("trigger");
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    scheduler.start();
}

转载于:https://my.oschina.net/u/2260265/blog/402267

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值