基于zookeeper的分布式任務調(diào)度組件,非常小巧,使用簡單,只需要引入jar包,不需要單獨部署服務端。確保所有任務在集群中不重復,不遺漏的執(zhí)行。支持動態(tài)添加和刪除任務。
說明:
public class SimpleTask { private static int i = 0; public void print() { System.out.println("===========start!========="); System.out.println("I:"+i);i++; System.out.println("=========== end !========="); } }
<!-- 分布式任務管理器 --> <bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager" init-method="init"> <property name="zkConfig"> <map> <entry key="zkConnectString" value="127.0.0.1:2181" /> <entry key="rootPath" value="/uncode/schedule" /> <entry key="zkSessionTimeout" value="60000" /> <entry key="userName" value="ScheduleAdmin" /> <entry key="password" value="password" /> <entry key="isCheckParentPath" value="true" /> <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" /> </map> </property> </bean>
1 動態(tài)添加任務
ConsoleManager.addScheduleTask(TaskDefine taskDefine);
2 動態(tài)刪除任務
ConsoleManager.delScheduleTask(String targetBean, String targetMethod);
3 查詢?nèi)蝿樟斜?/p>
ConsoleManager.queryScheduleTask();
1 Spring bean
public class SimpleTask { private static int i = 0; public void print() { System.out.println("===========start!========="); System.out.println("I:"+i);i++; System.out.println("=========== end !========="); } }
2 xml配置
<!-- 分布式任務管理器 --> <bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager" init-method="init"> <property name="zkConfig"> <map> <entry key="zkConnectString" value="127.0.0.1:2181" /> <entry key="rootPath" value="/uncode/schedule" /> <entry key="zkSessionTimeout" value="60000" /> <entry key="userName" value="ScheduleAdmin" /> <entry key="password" value="password" /> <entry key="isCheckParentPath" value="true" /> <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" /> </map> </property> </bean> <!-- Spring bean配置 --> <bean id="taskObj" class="cn.uncode.schedule.SimpleTask"/> <!-- Spring task配置 --> <task:scheduled-tasks scheduler="zkScheduleManager"> <task:scheduled ref="taskObj" method="print" fixed-rate="5000"/> </task:scheduled-tasks>
1 Spring bean
@Component public class SimpleTask { private static int i = 0; @Scheduled(fixedDelay = 1000) public void print() { System.out.println("===========start!========="); System.out.println("I:"+i);i++; System.out.println("=========== end !========="); } }
2 xml配置
<!-- 配置注解掃描 --> <context:annotation-config /> <!-- 自動掃描的包名 --> <context:component-scan base-package="cn.uncode.schedule" /> <!-- 分布式任務管理器 --> <bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager" init-method="init"> <property name="zkConfig"> <map> <entry key="zkConnectString" value="127.0.0.1:2181" /> <entry key="rootPath" value="/uncode/schedule" /> <entry key="zkSessionTimeout" value="60000" /> <entry key="userName" value="ScheduleAdmin" /> <entry key="password" value="password" /> <entry key="isCheckParentPath" value="true" /> <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" /> </map> </property> </bean> <!-- Spring定時器注解開關--> <task:annotation-driven scheduler="zkScheduleManager" />
注意:spring的MethodInvokingJobDetailFactoryBean改成cn.uncode.schedule.quartz.MethodInvokingJobDetailFactoryBean <bean id="zkScheduleManager" class="cn.uncode.schedule.ZKScheduleManager" init-method="init"> <property name="zkConfig"> <map> <entry key="zkConnectString" value="183.131.76.147:2181" /> <entry key="rootPath" value="/uncode/schedule" /> <entry key="zkSessionTimeout" value="60000" /> <entry key="userName" value="ScheduleAdmin" /> <entry key="password" value="password" /> <entry key="autoRegisterTask" value="true" /> <entry key="ipBlacklist" value="127.0.0.2,127.0.0.3" /> </map> </property> </bean> <bean id="taskObj" class="cn.uncode.schedule.SimpleTask"/> <!-- 定義調(diào)用對象和調(diào)用對象的方法 --> <bean id="jobtask" class="cn.uncode.schedule.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 調(diào)用的類 --> <property name="targetObject" ref="taskObj" /> <!-- 調(diào)用類中的方法 --> <property name="targetMethod" value="print" /> </bean> <!-- 定義觸發(fā)時間 --> <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobtask"/> </property> <!-- cron表達式 --> <property name="cronExpression"> <value>0/3 * * * * ?</value> </property> </bean> <!-- 總管理類 如果將lazy-init='false'那么容器啟動就會執(zhí)行調(diào)度程序 --> <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="doTime"/> </list> </property> </bean>
訪問URL:項目名稱/uncode/schedule,如果servlet3.x以下,請手動配置web.xml文件
<servlet> <servlet-name>UncodeSchedule</servlet-name> <servlet-class>cn.uncode.schedule.web.ManagerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UncodeSchedule</servlet-name> <url-pattern>/uncode/schedule</url-pattern> </servlet-mapping>
作者:冶衛(wèi)軍(ywj_316@qq.com,微信:yeweijun)
技術支持QQ群:47306892
Copyright 2013 www.uncode.cn
更多建議: