Skip to content

Commit 7562a0d

Browse files
committed
增加spring 支持
1 parent eb07bc2 commit 7562a0d

File tree

5 files changed

+89
-18
lines changed

5 files changed

+89
-18
lines changed

README.md

Lines changed: 73 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LTS 轻量级分布式任务调度框架(Light Task Schedule)
88
* JobTracker : 负责接收并分配任务,任务调度。
99
* TaskTracker: 负责执行任务,执行完反馈给JobTracker。
1010

11-
框架支持实时任务,也支持定时任务,同时也支持CronExpression
11+
框架支持实时任务,也支持定时任务,同时也支持CronExpression, 有问题,请联系QQ
1212

1313
##架构图
1414
![Aaron Swartz](https://raw.githubusercontent.com/qq254963746/light-task-schedule/master/data/%E6%9E%B6%E6%9E%84%E5%9B%BE.png)
@@ -40,13 +40,13 @@ LTS 轻量级分布式任务调度框架(Light Task Schedule)
4040
* 因为各个节点都是无状态的,可以动态增加机器部署实例, 节点关注者会自动发现。
4141

4242
## 开发计划:
43-
* WEB后台管理
44-
* 框架优化
43+
* WEB后台管理
44+
* 框架优化
4545

4646
## 调用示例
4747
* 安装 zookeeper 和 mongo , 执行 data/mongo 目录下的 mongo.md 中的语句
4848

49-
运行 job-example模块中的例子
49+
运行 job-example模块中的例子(包含API启动例子和Spring例子)
5050
分别执行 JobTrackerTest TaskTrackerTest JobClientTest
5151

5252
这里给出的是java API(设置配置)方式启动, 也可以使用spring启动默认不启用spring,需引入job-ext-spring包
@@ -78,6 +78,31 @@ LTS 轻量级分布式任务调度框架(Light Task Schedule)
7878
}));
7979

8080
```
81+
或者Spring配置
82+
```xml
83+
<bean id="mongoConfig" class="com.lts.job.store.Config">
84+
<property name="addresses">
85+
<array>
86+
<value>localhost:27017</value>
87+
</array>
88+
</property>
89+
<property name="username" value="lts"/>
90+
<property name="password" value="lts"/>
91+
<property name="dbName" value="job"/>
92+
</bean>
93+
<bean id="jobTracker" class="com.lts.job.spring.JobTrackerFactoryBean" init-method="start">
94+
<!--<property name="clusterName" value="lts"/>--> <!-- 集群名称 -->
95+
<!--<property name="listenPort" value="35001"/>--> <!-- 默认 35001 -->
96+
<property name="zookeeperAddress" value="localhost:2181"/>
97+
<property name="storeConfig" ref="mongoConfig"/>
98+
<property name="masterNodeChangeListeners">
99+
<array>
100+
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
101+
</array>
102+
</property>
103+
</bean>
104+
```
105+
81106

82107
## JobClient端
83108
```java
@@ -96,6 +121,34 @@ LTS 轻量级分布式任务调度框架(Light Task Schedule)
96121
// job.setTriggerTime(new Date().getTime()); // 支持指定时间执行
97122
Response response = jobClient.submitJob(job);
98123
```
124+
或者spring方式启动
125+
```xml
126+
<bean id="jobClient" class="com.lts.job.spring.JobClientFactoryBean" init-method="start">
127+
<property name="clientType" value="retry"/> <!-- 取值: 为空(默认normal), normal, retry -->
128+
<!--<property name="clusterName" value="lts"/>--> <!-- 默认 defaultCluster -->
129+
<property name="nodeGroup" value="TEST"/> <!-- 节点组名称 -->
130+
<property name="zookeeperAddress" value="localhost:2181"/>
131+
<property name="jobFinishedHandler">
132+
<bean class="com.lts.job.example.support.JobFinishedHandlerImpl"/> <!-- 任务完成处理器 -->
133+
</property>
134+
<property name="masterNodeChangeListeners"><!-- 所属节点组中master节点变化监听器 -->
135+
<array>
136+
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
137+
</array>
138+
</property>
139+
</bean>
140+
```
141+
```java
142+
// 从Spring容器中取得JobClient Bean
143+
JobClient jobClient = (JobClient) applicationContext.getBean("jobClient");
144+
// 提交任务
145+
Job job = new Job();
146+
job.setParam("shopId", "11111");
147+
job.setTaskTrackerNodeGroup("TEST_TRADE");
148+
// job.setCronExpression("0 0/1 * * * ?"); // 支持 cronExpression表达式
149+
// job.setTriggerTime(new Date().getTime()); // 支持指定时间执行
150+
Response response = jobClient.submitJob(job);
151+
```
99152

100153
## TaskTracker端
101154
```java
@@ -125,5 +178,20 @@ LTS 轻量级分布式任务调度框架(Light Task Schedule)
125178
}
126179
}
127180
```
181+
或者Spring方式配置
182+
```xml
183+
<bean id="taskTracker" class="com.lts.job.spring.TaskTrackerFactoryBean" init-method="start">
184+
<!--<property name="clusterName" value="lts"/>-->
185+
<property name="nodeGroup" value="TEST_TRADE"/><!-- 所属节点组名称 -->
186+
<property name="zookeeperAddress" value="localhost:2181"/>
187+
<property name="jobRunnerClass" value="com.lts.job.example.support.TestJobRunner"/> <!-- 任务执行类 -->
188+
<property name="workThreads" value="1"/> <!-- 工作线程个数 -->
189+
<property name="masterNodeChangeListeners"> <!-- 所属节点组中master节点变化监听器,可以不用配置 -->
190+
<array>
191+
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
192+
</array>
193+
</property>
194+
</bean>
195+
```
196+
128197

129-
有问题联系QQ:254963746

job-example/src/main/resources/lts-spring-job-client.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
<bean id="jobClient" class="com.lts.job.spring.JobClientFactoryBean" init-method="start">
99
<property name="clientType" value="retry"/> <!-- 取值: 为空(默认normal), normal, retry -->
1010
<!--<property name="clusterName" value="lts"/>--> <!-- 默认 defaultCluster -->
11-
<property name="nodeGroup" value="TEST"/>
11+
<property name="nodeGroup" value="TEST"/> <!-- 节点组名称 -->
1212
<property name="zookeeperAddress" value="localhost:2181"/>
1313
<property name="jobFinishedHandler">
14-
<bean class="com.lts.job.example.support.JobFinishedHandlerImpl"/>
14+
<bean class="com.lts.job.example.support.JobFinishedHandlerImpl"/> <!-- 任务完成处理器 -->
1515
</property>
16-
<property name="masterNodeChangeListeners">
16+
<property name="masterNodeChangeListeners"><!-- 所属节点组中master节点变化监听器,可以不用配置 -->
1717
<array>
1818
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
1919
</array>

job-example/src/main/resources/lts-spring-job-tacker.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<!--<property name="listenPort" value="35001"/>--> <!-- 默认 35001 -->
2121
<property name="zookeeperAddress" value="localhost:2181"/>
2222
<property name="storeConfig" ref="mongoConfig"/>
23-
<property name="masterNodeChangeListeners">
23+
<property name="masterNodeChangeListeners"><!-- 所属节点组中master节点变化监听器,可以不用配置 -->
2424
<array>
2525
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
2626
</array>

job-example/src/main/resources/lts-spring-job-tasktracker.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
<bean id="taskTracker" class="com.lts.job.spring.TaskTrackerFactoryBean" init-method="start">
99
<!--<property name="clusterName" value="lts"/>-->
10-
<property name="nodeGroup" value="TEST_TRADE"/>
10+
<property name="nodeGroup" value="TEST_TRADE"/><!-- 所属节点组名称 -->
1111
<property name="zookeeperAddress" value="localhost:2181"/>
12-
<property name="jobRunnerClass" value="com.lts.job.example.support.TestJobRunner"/>
13-
<property name="workThreads" value="1"/>
14-
<property name="masterNodeChangeListeners">
12+
<property name="jobRunnerClass" value="com.lts.job.example.support.TestJobRunner"/> <!-- 任务执行类 -->
13+
<property name="workThreads" value="1"/> <!-- 工作线程个数 -->
14+
<property name="masterNodeChangeListeners"> <!-- 所属节点组中master节点变化监听器,可以不用配置 -->
1515
<array>
1616
<bean class="com.lts.job.example.support.MasterNodeChangeListenerImpl"/>
1717
</array>

job-extensions/job-ext-spring/src/main/java/com/lts/job/spring/TaskTrackerFactoryBean.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.lts.job.core.util.Assert;
55
import com.lts.job.core.util.StringUtils;
66
import com.lts.job.task.tracker.TaskTracker;
7+
import com.lts.job.task.tracker.runner.JobRunner;
78
import org.springframework.beans.BeansException;
89
import org.springframework.beans.factory.DisposableBean;
910
import org.springframework.beans.factory.FactoryBean;
@@ -48,7 +49,7 @@ public class TaskTrackerFactoryBean implements FactoryBean<TaskTracker>, Applica
4849
/**
4950
* 任务执行类
5051
*/
51-
private String jobRunnerClass;
52+
private Class jobRunnerClass;
5253
/**
5354
* master节点变化监听器
5455
*/
@@ -81,7 +82,9 @@ public void checkProperties() {
8182
Assert.hasText(nodeGroup, "nodeGroup必须设值!");
8283
Assert.hasText(zookeeperAddress, "zookeeperAddress必须设值!");
8384
Assert.isTrue(workThreads > 0, "workThreads必须大于0!");
84-
Assert.hasText(jobRunnerClass, "jobRunnerClass不能唯恐");
85+
Assert.notNull(jobRunnerClass, "jobRunnerClass不能为空");
86+
Assert.isAssignable(JobRunner.class, jobRunnerClass,
87+
StringUtils.format("jobRunnerClass必须实现{}接口!", JobRunner.class.getName()));
8588
}
8689

8790
@Override
@@ -98,7 +101,7 @@ public void afterPropertiesSet() throws Exception {
98101
taskTracker.setWorkThreads(workThreads);
99102
taskTracker.setNodeGroup(nodeGroup);
100103
taskTracker.setZookeeperAddress(zookeeperAddress);
101-
taskTracker.setJobRunnerClass(Class.forName(jobRunnerClass));
104+
taskTracker.setJobRunnerClass(jobRunnerClass);
102105

103106
registerRunnerBeanDefinition();
104107

@@ -116,7 +119,7 @@ public void afterPropertiesSet() throws Exception {
116119
private void registerRunnerBeanDefinition() {
117120
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)
118121
((ConfigurableApplicationContext) applicationContext).getBeanFactory();
119-
String beanName = jobRunnerClass;
122+
String beanName = jobRunnerClass.getName();
120123
if (!beanFactory.containsBean(beanName)) {
121124
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(jobRunnerClass);
122125
builder.setScope("prototype");
@@ -151,7 +154,7 @@ public void setMasterNodeChangeListeners(MasterNodeChangeListener[] masterNodeCh
151154
this.masterNodeChangeListeners = masterNodeChangeListeners;
152155
}
153156

154-
public void setJobRunnerClass(String jobRunnerClass) {
157+
public void setJobRunnerClass(Class jobRunnerClass) {
155158
this.jobRunnerClass = jobRunnerClass;
156159
}
157160

0 commit comments

Comments
 (0)