java-分布式任務調度的兩種方式


在以往的項目開發中,分布式任務調度從 代碼控制 到數據庫 控制的過渡。。。。。

第一種方式:擴展spring 的 CronTriggerBean,將  屬性注入進去

先來看一段代碼:

 

 1 package com.lixiaodao.task.quartz;
 2 
 3 import java.text.ParseException;
 4 import java.util.Map;
 5 
 6 import org.slf4j.Logger;
 7 import org.slf4j.LoggerFactory;
 8 import org.springframework.scheduling.quartz.CronTriggerBean;
 9 
10 import com.lixiaodao.utils.DateUtil;
11 import com.lixiaodao.utils.StrUtils;
12 
13 public class LixiaodaoCronTriggerBean  extends CronTriggerBean{
14 
15     private static final long serialVersionUID = 4625482606892589275L;
16     
17     private static final Logger logger = LoggerFactory.getLogger(LixiaodaoCronTriggerBean.class);
18     
19     private Map<String, String> cronExpressionMap;
20     
21     private static final String TEN_YEAR_LATER = DateUtil.date2String(DateUtil.rollByYear(10), DateUtil.SDF_YYYY);
22     private static final String NOT_EXCUTE =  "0 0 0 1 1 ? " + TEN_YEAR_LATER; /**設定一個10年后的時間,只要服務器10年內重啟,定時任務就不會執行**/
23 
24     /**
25      * 重寫 父類的方法
26      */
27     @Override
28     public void setCronExpression(String cronExpression) throws ParseException {
29         String localIp = "";//TODO ..這里是獲取本地ip 的一種方式,內網或者外網,都可以,只要統一就ok
30         cronExpression = "";
31         if(cronExpressionMap != null){
32             cronExpression = cronExpressionMap.get(localIp);
33         }
34         if(StrUtils.isBlank(cronExpression)){
35             cronExpression = NOT_EXCUTE;
36         }
37         logger.debug("{} 使用 定時 {}",new Object[]{localIp,cronExpression});
38         super.setCronExpression(cronExpression);
39     }
40     
41 }

再看配置:(黃色部分)

  1)自己擴展

  2)配置文件注入 <ip,執行周期鍵值對>

    如此就可以實現,多台服務器(不同ip),相同的配置文件下,不同的服務器調度不同的任務了

    

 1     <bean id="runTask" class="com.lixiaodao.task.quartz.LixiaodaoCronTriggerBean">
 2         <property name="jobDetail">
 3             <bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
 4                 <property name="targetObject" ref="adminUserService"/>
 5                 <property name="targetMethod" value="clearPublishCount"/>
 6                 <property name="concurrent" value="false"/>
 7             </bean>
 8         </property>
 9         <property name="cronExpressionMap">  
10               <map>  
11                 <entry key="10.4.7.78" value="0 0 0 * * ?"/> 
12                 <entry key="10.4.3.180" value="0 2 0 * * ?"/>
13               </map>  
14           </property>
15     </bean>

第二種方式: 用 quartz 提供的數據庫 實現方式,實現分布式任務調度

   具體參見:http://blog.csdn.net/zxl315/article/details/10830105 

      原文詳細,不再贅述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM