Spring 定时调度

来源:互联网 发布:unity3d 光线追踪 编辑:程序博客网 时间:2024/05/16 13:48

<!-- 由JobDetailBean 负责-->
<bean id="hetongTask"
             class="org.springframework.scheduling.quartz.JobDetailBean">

             <property name="jobClass">
                     <value>cc.dfsoft.ranqi.service.bean.dme.gqht.HetongTask</value>
             </property>

             <property name="jobDataAsMap">
                     <map>
                            <entry key="gongqihetongBean">

                                      <ref bean="gongqihetongBean" />
                            </entry>
                     </map>
             </property>
 </bean>
 <bean id="rukudanTask"
             class="org.springframework.scheduling.quartz.JobDetailBean">

           <property name="jobClass">
                      <value>cc.dfsoft.edm.service.bean.purchase.RukudanTask</value>
           </property>

           <property name="jobDataAsMap">
                 <map>
                        <entry key="tankCarPurchaseRuKuBean">

                             <ref bean="tankCarPurchaseRuKuBean" />
                        </entry>
                 </map>
            </property>
 </bean>
 

<!-- 关键在如下两个触发器的配置 -->

<!-- 类似于Java的简单触发器 -->


<!-- 定义触发的时间 -->


<!-- 定义触发的时间 -->

 

 <bean id="cronReportTrigger"
             class="org.springframework.scheduling.quartz.CronTriggerBean">

             <property name="jobDetail">
                     <ref bean="hetongTask" />
             </property>
             <property name="cronExpression">
                    <value>0 7 15 *,* * ?</value>
             </property>
 </bean>

<!-- 复杂触发器 --> 
 <bean id="cronReportRukudanTrigger"
            class="org.springframework.scheduling.quartz.SimpleTriggerBean">

            <property name="jobDetail">
                    <ref bean="rukudanTask" />
            </property>
            <property name="repeatInterval" value="20000" />
 </bean>


 

<!-- 管理触发器 -->

 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                     <list>
                             <ref bean="cronReportTrigger" />
                             <ref bean="cronReportRukudanTrigger" />
                     </list>
             </property>
 </bean>

 

 

 

public class RukudanTask extends QuartzJobBean{

 private TankCarPurchaseRuKuBean tankCarPurchaseRuKuBean;
 
 public void setTankCarPurchaseRuKuBean(
   TankCarPurchaseRuKuBean tankCarPurchaseRuKuBean) {
  this.tankCarPurchaseRuKuBean = tankCarPurchaseRuKuBean;
 }

 protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  try {
   //自动检测合同有效期,如果当前日期 == 合同的终止日期,则将该合同在当天设置为过期状态
   tankCarPurchaseRuKuBean.autoCancelRukudan();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

 

对于复杂触发器的cronExpression,可借鉴linux的cron。

关于cronExpression的介绍:

 
字段   允许值   允许的特殊字符   0-59   , - * /   0-59   , - * / 小时   0-23   , - * / 日期   1-31   , - * ? / L W C 月份   1-12 或者 JAN-DEC   , - * / 星期   1-7 或者 SUN-SAT   , - * ? / L C # 年(可选)   留空, 1970-2099   , - * /

表达式

  意义 "0 0 12 * * ?"   每天中午12点触发 "0 15 10 ? * *"   每天上午10:15触发 "0 15 10 * * ?"   每天上午10:15触发 "0 15 10 * * ? *"   每天上午10:15触发 "0 15 10 * * ? 2005"   2005年的每天上午10:15触发 "0 * 14 * * ?"   在每天下午2点到下午2:59期间的每1分钟触发 "0 0/5 14 * * ?"   在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?"   在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?"   在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED"   每年三月的星期三的下午2:10和2:44触发 "0 15 10 ? * MON-FRI"   周一至周五的上午10:15触发 "0 15 10 15 * ?"   每月15日上午10:15触发 "0 15 10 L * ?"   每月最后一日的上午10:15触发 "0 15 10 ? * 6L"   每月的最后一个星期五上午10:15触发  "0 15 10 ? * 6L 2002-2005"   2002年至2005年的每月的最后一个星期五上午10:15触发 "0 15 10 ? * 6#3"   每月的第三个星期五上午10:15触发 每天早上6点

0 6 * * * 

每两个小时

0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * *

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3
1月1日早上4点

0 4 1 1 *

 

原创粉丝点击