首页 > 代码库 > java-分布式任务调度的两种方式
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 @Override28 public void setCronExpression(String cronExpression) throws ParseException {29 String localIp = "";//TODO ..这里是获取本地ip 的一种方式,内网或者外网,都可以,只要统一就ok30 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-分布式任务调度的两种方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。