淘宝开源项目TbSchedule的部署和使用

TBSchedule淘宝开源定时任务调度框架(附客户端源码demo) 淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包tbschedule、调度控制台ScheduleConsole.war(配置监控查看运行状况)   TBSchedule介绍: 1)调度机的高可用有保障,多调度机向注册中心注册后,共享调度任务 阅读详情

tbschedule项目其实可以分为两部分:

  1. schedule管理控制台。负责控制、监控任务执行状态
  2. 实际执行job的客户端程序。

在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息。实际分配任务的是tbschedule管理控制台,控制台从zookeeper获取job的运行信息。

tbSchedule通过控制ZNode的创建、修改、删除来间接控制Job的执行,执行Job的客户端会监听它们对应ZNode的状态更新事件,从而达到通过tbSchedule控制Job执行的目的。

部署zookeeper

去http://zookeeper.apache.org/releases.html#download下载最新稳定版本。下载完成后解压,将 /conf目录下的XXX.cfg更名为zoo.cfg,因为zookeeper启动时会在这个目录下找zoo.cfg读取配置信息。这个文件里有几个重要的参数需要说明一下:

  • tickTime=2000 
    • 定义时间计量单位。这里表示一个tick为2秒。以后在配置时间相关的东西时,都是以tick为单位的。
  • dataDir=/tmp 
    • 定义快照(snapshot)文件的存储位置。zookeeper会将节点信息定时写入到这个目录中。这个目录必须存在,否则启动时会报错。
  • clientPort=2181 
    • 指定客户端连接端口。 zookeeper会在这个端口监听连接请求。
  • server.1=127.0.0.1:2000:3000 
    • 这个参数仅在集群部署时起作用。格式为:server.id=host:port:port。id表示服务器的唯一标识,一般从1开始计数。第一个port表示zookeeper集群机器之间的通讯端口,第二个port表示当集群机器在选举leader时使用的通讯端口。只有当集群第一次启动,或master机崩溃时,才会进行leader选举。

配置完成后,切换到/bin目录,执行:

<code class=" hljs sql" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">./</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">zkServer</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">sh </span><span class="hljs-operator" style="box-sizing: border-box; padding: 0px;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">start</span></span></span></code>

即可启动zookeeper,默认会在后台运行,如果想在前端运行,需要执行:

<code class=" hljs sql" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">./</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">zkServer</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">sh </span><span class="hljs-operator" style="box-sizing: border-box; padding: 0px;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">start</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">-</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">foreground</span></span></code>

Zookeeper集群部署

集群部署时,除了需要指定zoo.cfg中server.X:XXXX:XX:XX参数外,还要在每台机器的dataDir目录下创建一个名为myid的文件,内容为当前机器的标识数字,与server.X中的X相同。完成配置后,依次启动每个zookeeper即可。 
注意,当你在启动第一个zookeeper时控制台会大量报错,这是因为其它的zookeeper还没有启动。无视即可。

tbSchedule控制台部署

tbSchedule就是个用servlet/JSP 写的web项目,我们可以直接把war包部署到tomcat中,然后在浏览器访问

<code class=" hljs cs" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">http</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">:</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;">//localhost:8080/ScheduleConsole</span></code>

即可。 
如果你想手动编译、构建项目而不是使用war包,要小心一个坑,那就是执行

<code class=" hljs lasso" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">mvn clean install </span><span class="hljs-attribute" style="box-sizing: border-box; padding: 0px;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">-</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Dmaven</span></span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">test</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span></span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">skip</span></span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box; padding: 0px;"><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span></span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">true</span></span></code>

时maven会报找不到构件的错误。查其原因,是因为这个项目太老了,当时是用maven2构建的,项目中用到的依赖版本也比较老了,而且它们所在的repository已经停用了,因此无法自动下载。解决方法,直接exclusion缺少的依赖即可:

<code class=" hljs xml" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">dependency</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">org.apache.zookeeper</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">zookeeper</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">version</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">3.3.3</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">version</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusions</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">com.sun.jmx</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">jmxri</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">com.sun.jdmk</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">jmxtools</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">javax.jms</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">jms</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusion</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">exclusions</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">dependency</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span></code>

第一次访问控制台时会出现以下配置页面: 
技术分享
第一行指定zookeeper的地址、端口,第二行是超时时间。用户名和密码在这里没有任何用处,无视即可。要注意的是第三行Zookeeper的根目录,这并不是指的部署zookeeper时指定的dataDir,而是一个你自己指定的、与当前管理控制台在同一个机器上的目录,tbSchedule管理控制台会将任务的配置信息(如执行开始时间,调度策略)保存到该目录下,这样下次启动管理控制台时就可以直接从目录中读取配置信息了。

填写完成后点保存,此时上面会出现一行红字,无视之。直接点击管理主页即可进入管理页面: 
技术分享

至此tbSchedule控制台部署完毕。

tbSchedule客户端编写

tbSchedule项目的test/目录下有很多测试类,可以执行

<code class=" hljs " style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">mvn test</span></code>

把测试跑一遍。跑之前要修改项目中schedule.xml文件正确填写zookeeper的连接地址。测试跑通则说明tbSchedule管理控制台和zookeeper都部署无误。

当我们要执行一个job时,需要创建新项目,引入tbschedule依赖,实现指定接口,然后打成jar包,通过

<code class=" hljs avrasm" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">java </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">-</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">jar </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">你的</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">jar</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">名</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box; padding: 0px;"><span class="pun" style="color: rgb(102, 102, 0); box-sizing: border-box; padding: 0px;">.</span><span class="pln" style="color: rgb(0, 0, 0); box-sizing: border-box; padding: 0px;">jar</span></span></code>

启动job。依赖如下:

<code class=" hljs xml" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">com.taobao.pamirs.schedule</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">groupId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">tbschedule</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">artifactId</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">version</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">3.2.16</span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136); padding: 0px;"><span class="tag" style="box-sizing: border-box; padding: 0px;">version</span></span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span></span></code>

同时别忘了集成spring。

Main方法代码如下:

<code class=" hljs java" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">public</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">static</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">void</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-title" style="box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">main</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">String</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">[]</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> args</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">throws</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Exception</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">ApplicationContext</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> ctx </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">new</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">ClassPathXmlApplicationContext</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"spring-config.xml"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">

        </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">TBScheduleManagerFactory</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> scheduleManagerFactory </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">new</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">TBScheduleManagerFactory</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">

        </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Properties</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> p </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">new</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Properties</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"zkConnectString"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"192.168.3.117:2181"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"rootPath"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"/home/platform/data"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"zkSessionTimeout"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"60000"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"userName"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"ScheduleAdmin"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"password"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"password"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">put</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"isCheckParentPath"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"true"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        scheduleManagerFactory</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">setApplicationContext</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">ctx</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        scheduleManagerFactory</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">init</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        scheduleManagerFactory</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">setZkConfig</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">convert</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">p</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">));</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">


    </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span></code>

执行这个方法后,你的程序就会向zookeeper发起连接,注册当前机器,请求任务队列,最后根据调度配置执行job。 
job的执行代码需要配置成一个spring bean:

<code class=" hljs applescript" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><bean</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-property" style="box-sizing: border-box; padding: 0px;"><span class="atn" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">id</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"testTaskBean"</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-type" style="box-sizing: border-box; padding: 0px;"><span class="atn" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">class</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"com.anzhi.schedule.task.TestTaskBean"</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"><</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">property</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-property" style="box-sizing: border-box; padding: 0px;"><span class="atn" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">name</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"jdbcTemplate"</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="atn" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">ref</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"jdbcTemplate"</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">/></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);"></bean></span></code>

这个bean的骨架如下:

<code class=" hljs php" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">public</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-class" style="box-sizing: border-box; padding: 0px;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="kwd" style="box-sizing: border-box; padding: 0px;">class</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px;">TestTaskBean</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="kwd" style="box-sizing: border-box; padding: 0px;">implements</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px;">IScheduleTaskDealSingle</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);"><</span><span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px;">PassportModel</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"><span class="com" style="box-sizing: border-box; padding: 0px;">/**
     * 选择任务. 从DB中读取数据, 将取出的数据返回
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> taskParameter
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> ownSign
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> taskItemNum
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> taskItemList
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> eachFetchDataNum
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @return</span></span><span class="com" style="box-sizing: border-box; padding: 0px;">
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @throws</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> Exception
     */</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">public</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">List</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);"><</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">PassportModel</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> selectTasks</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">String</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> taskParameter</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">String</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> ownSign</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                                         </span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">int</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> taskItemNum</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">List</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);"><</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">TaskItemDefine</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> taskItemList</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
                                         </span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">int</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> eachFetchDataNum</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">throws</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Exception</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">

        </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">List</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);"><</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">PassportModel</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">list</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">new</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">ArrayList</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);"><</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">PassportModel</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">>(</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; padding: 0px;">1</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">list</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">add</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">new</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">PassportModel</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">());</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">return</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">list</span></span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">

    </span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"><span class="com" style="box-sizing: border-box; padding: 0px;">/**
     * 向目标表中插入数据
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> model
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @param</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> ownSign
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @return</span></span><span class="com" style="box-sizing: border-box; padding: 0px;">
     *</span><span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box; padding: 0px;"><span class="com" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;"> @throws</span></span><span class="com" style="box-sizing: border-box; padding: 0px;"> Exception
     */</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">public</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">boolean</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> execute</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">PassportModel</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> model</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">String</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> ownSign</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">throws</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Exception</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">try</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box; padding: 0px;">//insertData(model);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">System</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="kwd" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 136);">out</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">println</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; padding: 0px;">"执行任务"</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">

            </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">return</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">true</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">catch</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;"><span class="typ" style="box-sizing: border-box; padding: 0px; color: rgb(102, 0, 102);">Exception</span></span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> e</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            e</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">printStackTrace</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">return</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; padding: 0px;">false</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="box-sizing: border-box; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="box-sizing: border-box; padding: 0px; color: rgb(102, 102, 0);">}</span></code>

其中泛型参数Passport是我们自定义的类。

tbSchedule的调用流程为:

  1. 执行selectTasks()方法,该方法返回一个List对象,表示你选择出的任务列表。
  2. 执行execute()方法,tbschedule会遍历你在selectTasks()方法中返回的List,然后对每一个元素都调用execute()方法。

任务调度的配置

进入tbSchedule管理控制台,创建一个新策略: 
技术分享

注意,任务名称格式为创建的任务名$自定义字符串。其中你自定义的字符串会被传递到selectTasks()方法中的ownSign参数中。

任务管理 -> 创建新任务: 
技术分享

这是对单个job的调度配置信息。 
重要参数说明:

  • 任务名称 
    • 就是刚才在配置策略时填写的名称($之前的部分)。
  • 处理模式 
    • SLEEP模式 
      • 当某一个线程任务处理完毕,从任务池中取不到任务的时候,检查其它线程是否处于活动状态。如果是,则自己休眠; 如果其它线程都已经因为没有任务进入休眠,当前线程是最后一个活动线程的时候,就调用业务接口,获取需要处理的任务,放入任务池中, 同时唤醒其它休眠线程开始工作。
    • NOTSLEEP模式 
      • 当一个线程任务处理完毕,从任务池中取不到任务的时候,立即调用业务接口获取需要处理的任务,放入任务池中。
  • 任务项 
    • 一个线程组(会有多个线程)只执行一个任务。
    • 一个任务项只能由一个任务处理器执行
    • 任务处理器是一个逻辑性的概念,一个任务处理器只有一个线程组。
    • 所以可以把任务划分为1,2,3,4,5,6,7,8, 9, 10一共10个任务碎片,10个任务碎片会被分配到10(刚才在创建调度策略中配置的)个线程组,那么每个线程组对应1个任务碎片,运行时任务项参数又被传递到bean任务类selectTasks方法的List queryCondition参数,例如第1个线程组调用selectTasks方法是queryCondition参数条件为1 ,第2个线程组执行参数条件为2。 我们需要在方法中自己解析这个数值,根据值的不同执行不同部分的任务。因为一个线程组会有多个线程,因此可以实现并行计算。

执行job

完成以上工作后,运行编写的job客户端,job即可被调度执行。 
技术分享

淘宝开源项目TbSchedule的部署和使用

分布式开源调度框架TBSchedule原理与应用 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源码分析 4. 与其他开源调度框架对比 第二部分 TBSchedule分布式调度示例 1. TBSchedule源码下载 2. 引入源码Demo开发示例 3. 控制台配置任务调度 4. selectTasks方法参数说明 5. 创建调度策略参数说明 6. 创建任务参数说明第一部分 TBSchedule基本概念 阅读详情

相关推荐

淘宝定时任务 tbschedule实战

说明: tbschedule项目其实可以分为两部分: 1)schedule管理控制台。负责控制、监控任务执行状态2)实际执行job的客户端程序。在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息

convict_EVA的专栏 1万+

基于Zookeeper的TbSchedule任务调度服务部署以及应用

一、前言 前面已经说过zookeeper集群的部署,接下来我们在zookeeper集群的基础上部署tbSchedule任务调度,开始部署之前我们先来简要看看tbSchedule是什么? TBSchedule:分布式任务调度框架,主要是为了协调多节点处理相同任务的避免数据被重复处理的框架,处理方式主要分为“抢占式”和“协同分配式”,通过集群的节点分担大批量任务的处理,提高批量任务的处理效率。...

山山来驰的博客 1392

深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用

本文深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用,详细对比两者的电流路径差异和电平变化特性。通过实际案例分享电路设计要点,包括上拉电阻选择、保护二极管配置等,并提供工业应用中的选型策略和常见故障排查指南,帮助工程师优化传感器系统集成。

weixin_42561476的博客 469

推荐开源项目:TBSchedule - 简洁高效的定时任务调度器

推荐开源项目:TBSchedule - 简洁高效的定时任务调度器 是一个轻量级、易部署和使用的分布式任务调度框架,适用于需要进行定时或周期性任务执行的各种场景。它的目标是让开发者能够以最小的学习成本,快速集成到现有系统中,实现强大的任务调度功能。 技术分析 设计理念 TBSchedule 采用了简单直观的设计,基于 Java 编写,支持 Spring Boot 集成,使得与现有Java应用的整合变...

gitblog_00071的博客 785

从零上手HiAgent:构建能听懂指令的智能体框架实战指南

智能体(Agent)作为人工智能领域的重要范式,正从传统的预设流程自动化转向以目标驱动的自主规划与执行。其核心原理在于利用大语言模型(LLM)作为决策大脑,通过任务规划、工具调用与记忆机制,将模糊的自然语言指令转化为可执行的工作流。这一技术显著提升了人机协作的效率和自然度,其价值在自动化办公、数据分析与智能流程编排等场景中尤为突出。本文聚焦于HiAgent这一具体框架,深入解析其作为智能体开发平台的核心架构,涵盖规划器、执行器、工具集等关键组件,并提供从环境配置、自定义工具开发到复杂任务链构建的完整工程实践

weixin_29266007的博客 888

毫米波雷达之CFAR 目标检测

恒虚警率(CFAR)算法是一种广泛应用于雷达目标检测的算法,其主要目 标是减少由于杂波与回波之间强度不对称而引起的误报,以确保相对恒定的虚警 率。如图 3.4(a)所示,表示由距离单元组成的一维数据。在待测单元 D 周围选 择若干个背景杂波功率的蓝色单元构成参考滑窗,称为参考单元;而待测单元 D 相邻的若干个不用于背景估计的单元则称为保护单元。当参考单元和保护单元的 维度从一维扩展到二维时,相应的 CFAR 检测由一维 CFAR 演变为二维 CFAR 以处理参考窗口,如图 3.4 (b)所示。

m0_56120826的博客 4921

taobao分布试调试管理框架TbSchedule整合部署教程

本教程介绍的是淘宝(taobao.com)开源技术分布试调试管理框架TbSchedule整合部署的入门知识,任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。 一、前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。比如定时给用户发送邮件、将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时

miaozhuang08的专栏 1082

【Linux】实际项目应该如何完成?--安防监控系统项目的总结

到目前为止我也做个5、6个嵌入式项目,但以往都是从零开始自己做,也就是毫无计划,想到那里做那里,有想法就会去实现,就这样导致我碰到了很多坑,也消耗了我许多时间,当然,不是说这样不好,因为在其中我也得到了一个很好的锻炼与练习,但是这不适用于在工作中去这样做。...

修成真的博客 6726

TBSchedule HelloWorld

淘宝官方参考手册:http://code.taobao.org/p/tbschedule/wiki/index/ http://www.jianshu.com/p/e66aa342f0d1 1.TBSchedule项目其实可以分为两部分: ①TBSchedule管理控制台。负责监控,监控任务执行状态 ②实际执行job的客户端程序 在实际使用时,首先要启动zookeeper,然后部署T...

iteye_7017的博客 504

Linux下libdrm实战:从零搭建一个简单的DRM显示程序(附完整代码)

本文是一份Linux下libdrm的实战指南,详细介绍了如何从零开始搭建一个简单的DRM显示程序。通过对比传统Framebuffer的局限性,阐述了现代DRM架构的核心优势与核心对象(FrameBuffer、Plane、CRTC等)的协作流程。文章提供了完整的代码示例,演示了如何打开设备、创建并填充Dumb Buffer、设置CRTC以依次显示红绿蓝纯色画面,并涵盖了编译、运行及进阶开发要点,为嵌入式Linux图形开发提供了扎实的入门基础。

weixin_29183637的博客 406

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

淘宝分布式调度框架TBSchedule

一、TBSchedule初识 时下互联网和电商领域,各个平台都存在大数据、高并发的特点,对数据处理的要求越来越高,既要保证高效性,又要保证安全性、准确性。TBSchedule的使命就是将调度作业从业务系统中分离出来,降低或者是消除和业务系统的耦合度,进行高效异步任务处理。其实在互联网和电商领域TBSchedule的使用非常广泛,目前被应用于阿里巴巴、淘宝、支付宝、京东、聚美、汽车之家、国美等

GarfieldEr007的专栏 7922

【WRF理论第十四期】 VEGPARM.TBL 文件详解

WRF 读取 VEGPARM.TBL 文件

WW、forever的博客 576

分布式调度框架TBSchedule

转载自:https://my.oschina.net/chaun/blog/653266 摘要: TBSchedule是一款非常优秀的高性能分布式调度框架,本文是作者结合多年使用TBSchedule的经验,在研读三遍源码的基础上完成。期间作者也与阿里空玄有过不少技术交流,并非常感谢空玄给予的大力支持。另外,作者写这篇文章的目的一是出于对TBSchedule的一种热爱,二是现在是一个资源共享、

song218888的专栏 1934

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5524

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TBSchedule初识

声明:本文为优快云原创投稿文章,未经许可,禁止任何形式的转载。  作者:周立伟(ITeye博客:mycolababy.iteye.com),京东商城高级工程师,关注分布式、高并发和Java中间件的研究。  责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@youkuaiyun.com,另有「优快云 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshugu

da sheng 的专栏 1175

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

关于TbSchedule任务调度管理框架的整合部署

 http://www.cnblogs.com/lengfo/p/4146797.html 关于TbSchedule任务调度管理框架的整合部署 一、前言 任务调度管理作为基础架构通常会出现于我们的业务系统中,目的是让各种任务能够按计划有序执行。比如定时给用户发送邮件、将数据表中的数据同步到另一个数据表都是一个任务,这些相对耗时的操作通过任务调度系统来异步并行执行,既能提高任

strawbingo的专栏 9659

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TBSchedule应用实战(零点五)—— 我什么时候该用TBSchedule

TBSchedule的中文释义为:淘宝分布式定时任务调度框架。这里我们先剧透一下tbs的执行能力: tbs开源版本依赖于Spring与Zookeeper。纯JAVA实现的调度过程以及优秀的并发处理代表其具备低耦合,可容灾,低资源占用,低故障率,高效率等特点。其主要用于在分布式...

choufuzhuo5419的博客 402

淘宝TBSchedule任务调度框架应用参考

主要内容: 第一部分 TBSchedule基本概念及原理  1. 概念介绍  2. 工作原理  3. 源码分析  4. 与其他开源调度框架对比 第二部分 TBSchedule分布式调度示例  1. TBSchedule源码下载  2. 引入源码Demo开发示例  3. 控制台配置任务调

huangyf008的博客 1915
上一篇: 学习 Mybatis
下一篇: spring 动态 多数据源 数据库 (datasource )配置
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值