淘宝开源项目TbSchedule的使用
2016-11-04 12:52
375 查看
淘宝开源项目TbSchedule的使用
项目架构
springboot+tbschedule实现调度项目结构图
项目搭建
pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zto.schedule</groupId> <artifactId>zto-schedule</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.taobao.pamirs.schedule</groupId> <artifactId>tbschedule</artifactId> <version>3.2.14</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.1-alpha</version> </dependency> </dependencies> </project>
application.yml
--- spring.profiles: dev server: context-path: /zto-schedule logging: level: root: INFO job: zkConfig: zkConnectString: 10.10.4.40:2181 rootPath: /tb-schedule/test zkSessionTimeout: 60000 userName: admin password: admin isCheckParentPath: true
ScheduleJobConfiguration.java
package com.zto.schedule.config; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.taobao.pamirs.schedule.strategy.TBScheduleManagerFactory; @Configuration public class ScheduleJobConfiguration{ @Bean(initMethod = "init") public TBScheduleManagerFactory tbScheduleManagerFactory( @Value("${job.zkConfig.zkConnectString}")String zkConnectString, @Value("${job.zkConfig.rootPath}")String rootPath, @Value("${job.zkConfig.zkSessionTimeout}")String zkSessionTimeout, @Value("${job.zkConfig.userName}")String userName, @Value("${job.zkConfig.password}")String password, @Value("${job.zkConfig.isCheckParentPath}")String isCheckParentPath) { TBScheduleManagerFactory tbScheduleManagerFactory = new TBScheduleManagerFactory(); Map<String, String> zkConfig = new HashMap<String, String>(); zkConfig.put("zkConnectString", zkConnectString); zkConfig.put("rootPath", rootPath); zkConfig.put("zkSessionTimeout", zkSessionTimeout); zkConfig.put("userName", userName); zkConfig.put("password", password); zkConfig.put("isCheckParentPath", isCheckParentPath); tbScheduleManagerFactory.setZkConfig(zkConfig); return tbScheduleManagerFactory; } }
或者xml中配置
init.properties
#注册中心地址 schedule.zookeeper.address=10.10.4.40:2181 #定时任务根目录,任意指定,调度控制台配置时对应 schedule.root.catalog=/tb-schedule/test #账户,任意指定,调度控制台配置时对应 schedule.username=admin #密码,任意指定,调度控制台配置时对应 schedule.password=admin #超时配置 schedule.timeout=60000
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 引入外部文件 --> <context:property-placeholder location="classpath:init.properties" /> <bean id="scheduleManagerFactory" class="com.taobao.pamirs.schedule.strategy.TBScheduleManagerFactory" init-method="init"> <property name="zkConfig"> <map> <entry key="zkConnectString" value="${schedule.zookeeper.address}" /> <entry key="rootPath" value="${schedule.root.catalog}" /> <entry key="zkSessionTimeout" value="${schedule.timeout}" /> <entry key="userName" value="${schedule.username}" /> <entry key="password" value="${schedule.password}" /> <entry key="isCheckParentPath" value="true" /> </map> </property> </bean> </beans>
TaskModel.java
package com.zto.schedule.test; public class TaskModel { private String name; private String job; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public TaskModel(String name, String job) { super(); this.name = name; this.job = job; } public TaskModel() { super(); } }
* 1、IScheduleTaskDeal 调度器对外的基础接口,是一个基类,并不能被直接使用
* 2、IScheduleTaskDealSingle 单任务处理的接口,继承 IScheduleTaskDeal
* 3、IScheduleTaskDealMulti 可批处理的任务接口,继承 IScheduleTaskDeal
* @param taskParameter 任务的自定义参数
* @param ownSina 当前环境名称
* @param taskQueueNum 当前任务类型的任务队列数量
* @param taskItemList 当前调度服务器,分配到的可处理队列
* @param eachFetchDataNum 每次获取数据的数量
IScheduleTaskDealSingleTest.java
package com.zto.schedule.test; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.taobao.pamirs.schedule.IScheduleTaskDealSingle; import com.taobao.pamirs.schedule.TaskItemDefine; @Component("iScheduleTaskDealSingleTest") public class IScheduleTaskDealSingleTest implements IScheduleTaskDealSingle<TaskModel>{ private static final Logger LOG = LoggerFactory.getLogger(IScheduleTaskDealSingleTest.class); @Override public Comparator<TaskModel> getComparator() { return null; } @Override public List<TaskModel> selectTasks(String taskParameter, String ownSign, int taskQueueNum, List<TaskItemDefine> taskItemList, int eachFetchDataNum) throws Exception { //LOG.info("IScheduleTaskDealSingleTest配置的参数,taskParameter:{},ownSina:{},taskQueueNum:{},taskItemList:{}, eachFetchDataNum:{}", taskParameter, ownSign, taskQueueNum, taskItemList, eachFetchDataNum); LOG.info("IScheduleTaskDealSingleTest选择任务列表开始啦.........."); List<TaskModel> models = new ArrayList<TaskModel>(); models.add(new TaskModel(String.valueOf(System.currentTimeMillis()), "taosirTest1")); models.add(new TaskModel(String.valueOf(System.currentTimeMillis()), "taosirTest2")); return models; } @Override public boolean execute(TaskModel model, String ownSign) throws Exception { LOG.info("IScheduleTaskDealSingleTest执行开始啦.........." + new Date()); System.out.println(model); return true; } }
最后在Application中启动即可
Application.java
package com.zto.schedule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ImportResource; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableCaching @EnableConfigurationProperties @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) //@ImportResource({"classpath*:*.xml"}) //@EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
当然还要在调度中心配置相关参数
连接配置
创建新的调度策略(新建的时候是启动状态,先关闭掉,等程序启动之后在开始,不然一直莫名其妙的错误)
新建任务管理
目前就这些了。启动项目
如图,已经启动成功
然后启动调度任务
之后查看控制台日志,15秒钟执行一次.........
有一个奇葩的地方就是任务管理里面机器如果超过四个没有释放的话,调度好像就不执行.
之后等机器释放掉之后才能再次使用........
我屮艸芔茻,为什么我的图看不清楚.....
相关文章推荐
- 淘宝开源项目TbSchedule的部署和使用
- 淘宝开源项目TbSchedule的部署和使用
- 淘宝开源项目TbSchedule的部署和使用
- [TB-Technology] 淘宝在数据处理领域的项目及开源产品介绍
- 开源项目大家谈-网站性能调校-Cache的使用
- 使用cvs或svn从sourceforge上获取开源项目的方法
- 目前正在使用的框架和一些开源的项目
- 使用开源项目打造GIS应用系统
- 使用MOno Cecil 的相关开源项目
- 开源项目管理软件禅道使用帮助下载
- (zt)目前正在使用的框架和一些开源的项目
- 使用MOno Cecil 的相关开源项目
- 使用开源手机邮箱项目——mujMail
- 开源gis项目Mitab在C#中的使用方法(原创)
- 使用cvs或svn从sourceforge上获取开源项目详解-亲身实践
- 使用VS2008+SVN插件配合Google Code搭建自己的开源项目管理
- [转]Java的开源项目:简单介绍Log4J的使用
- StatCVS 对使用CVS的项目进行深入统计的开源工具
- 开源项目SpringOSGINoDM—OSGI环境下使用Spring的唯一完美解决方案
- Java的开源项目:简单介绍Log4J的使用