Spring 集成Quartz

Spring通过quartz框架可以进行任务调度。

要在spring 中利用quartz调度任务;需要配置三个bean:
1、 jobDetail 任务详细信息;包括调用哪个类;类中的哪个方法;执行时是否可并行执行任务。
2、 trigger 任务调度触发器;主要用于定义jobDetail什么时候执行。触发器最常用的有两种:简单触发器SimpleTrigger 和 任务触发器CronTrigger 。SimpleTrigger和jdk的timer类似,只能指定任务执行以什么样的频率执行,但无法制定精确的执行时间。CronTrigger则既可以执行简单触发器所制定的以频率来执行的时间,也可以制定复杂的时间计划来执行。如可制定:每个月的最后一天的15点来执行相关任务。
3、 schedulerFactory 任务调度工厂;用于调度各个任务触发器。

例子1、

public void doSimpleTriggerTask() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("doing simpleTrigger task..." + sdf.format(new Date()));
    }

    public void doCronTriggerTask() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("doing cronTrigger task..." + sdf.format(new Date()));
    }
 <!-- 注册一个普通bean -->
   <bean id="quartzTask" class="cn.itcast.nsfw.complain.QuartzTask"></bean>

   <!-- 1、制定任务信息信息 -->
   <bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
           <!-- 设置执行对象 -->
           <property name="targetObject" ref="quartzTask"></property>
           <!-- 设置执行对象中对应的执行方法 -->
           <property name="targetMethod" value="doSimpleTriggerTask"></property>
           <!-- 是否可以同步执行;不可同步执行 -->
           <property name="concurrent" value="false"></property>
   </bean>
   <bean id="jobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
           <!-- 设置执行对象 -->
           <property name="targetObject" ref="quartzTask"></property>
           <!-- 设置执行对象中对应的执行方法 -->
           <property name="targetMethod" value="doCronTriggerTask"></property>
           <!-- 是否可以同步执行;不可同步执行 -->
           <property name="concurrent" value="false"></property>
   </bean>

   <!-- 2、制定任务执行时机(任务执行触发器) -->
   <bean id="simplerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <!-- 设置任务详细 -->
        <property name="jobDetail" ref="jobDetail1"></property>
        <!-- 设置任务延迟执行时间 ;延迟2秒执行-->
        <property name="startDelay" value="2000"></property>
        <!-- 设置任务执行频率;执行频率为每4秒执行一下 -->
        <property name="repeatInterval" value="2000"></property>
   </bean>
   <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 设置任务详细 -->
        <property name="jobDetail" ref="jobDetail2"></property>
        <!-- 设置任务执行时机,cron表达式 -->
        <property name="cronExpression" value="0/3 * * * ?"></property>
   </bean>

   <!-- 3、设置调度工厂 -->
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <!-- <ref bean="simplerTrigger"/> -->
                <ref bean="cronTrigger"/>
            </list>
        </property>
   </bean>

例子2、

@Override
    public void autoDeal() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, 1);//设置当前时间的日期为1号
        cal.set(Calendar.HOUR_OF_DAY, 0);//设置当前时间的日期为1号,0时
        cal.set(Calendar.MINUTE, 0);//设置当前时间的日期为1号,0分
        cal.set(Calendar.SECOND, 0);//设置当前时间的日期为1号,0秒

        //1、查询本月之前的待受理的投诉列表
        QueryHelper queryHelper = new QueryHelper(Complain.class, "c");
        queryHelper.addCondition("c.state=?", Complain.COMPLAIN_STATE_UNDONE);
        queryHelper.addCondition("c.compTime < ?", cal.getTime());//本月1号0时0分0秒

        List<Complain> list = findObjects(queryHelper);
        if(list != null && list.size() > 0){
            //2、更新投诉信息的状态为 已失效
            for(Complain comp: list){
                comp.setState(Complain.COMPLAIN_STATE_INVALID);
                complainDao.update(comp);
            }
        }
    }
 <!--1、 制定任务信息 -->
    <bean id="complianJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 设置执行对象 -->
        <property name="targetObject" ref="complainService"></property>
        <!-- 设置执行对象中的执行方法 -->
        <property name="targetMethod" value="autoDeal"></property>
         <!-- 设置是否可以同步,不可以同步执行 -->
        <property name="concurrent" value="false"></property>
    </bean>

    <!-- 2、制定任务执行时机(任务执行触发器) -->
    <bean id="complainCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 设置任务详细信息 -->
        <property name="jobDetail" ref="complianJobDetail"></property>
        <!-- 设置任务执行的时间,cronExpression为每月最后一日的下午21点的每分的10秒执行任务 -->
        <property name="cronExpression" value="10 * 21 L * ?"></property>
    </bean>

    <!-- 3、设置调度工厂 -->
    <bean id="complainScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <ref bean="complainCronTrigger"/>
        </property>
    </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值