标签: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
原文详细,不再赘述
标签:style blog http color io 使用 java ar 文件
原文地址:http://www.cnblogs.com/lixiaodao-java/p/3973496.html