码迷,mamicode.com
首页 > 编程语言 > 详细

java-分布式任务调度的两种方式

时间:2014-09-15 21:06:19      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   使用   java   ar   文件   

在以往的项目开发中,分布式任务调度从 代码控制 到数据库 控制的过渡。。。。。

第一种方式:扩展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 

      原文详细,不再赘述

 

java-分布式任务调度的两种方式

标签:style   blog   http   color   io   使用   java   ar   文件   

原文地址:http://www.cnblogs.com/lixiaodao-java/p/3973496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!