LTS:spring

在lts-admi后台 添加任务的时候 用户参数 输入
{"type":"aType"}
String type = job.getParam("type"); 会得到aType来判断执行哪个runner
========================================
pom.xml
========================================
<dependency>
<groupId>com.github.ltsopensource</groupId>
<artifactId>lts-spring</artifactId>
<version>1.7.0</version>
</dependency>
========================================
LTSSpringConfig.java
========================================
@Configuration
public class LTSSpringConfig implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Bean(name = "taskTracker")
public TaskTracker getTaskTracker() throws Exception {
TaskTrackerAnnotationFactoryBean factoryBean = new TaskTrackerAnnotationFactoryBean();
factoryBean.setApplicationContext(applicationContext);
factoryBean.setClusterName("test_cluster");
factoryBean.setJobRunnerClass(JobRunnerDispatcher.class);
factoryBean.setNodeGroup("test_trade_TaskTracker");
factoryBean.setBizLoggerLevel("INFO");
factoryBean.setRegistryAddress("zookeeper://127.0.0.1:2181");
factoryBean.setMasterChangeListeners(new MasterChangeListener[]{
new MasterNodeChangeListener()
});
factoryBean.setWorkThreads(20);
Properties configs = new Properties();
configs.setProperty("job.fail.store", "leveldb");
factoryBean.setConfigs(configs);
factoryBean.afterPropertiesSet();
factoryBean.start();
return factoryBean.getObject();
}

@Bean(name = "jobClient")
public JobClient getJobClient() throws Exception {
JobClientFactoryBean factoryBean = new JobClientFactoryBean();
factoryBean.setClusterName("test_cluster");
factoryBean.setRegistryAddress("zookeeper://127.0.0.1:2181");
factoryBean.setNodeGroup("test_jobClient1111");
factoryBean.setJobCompletedHandler(new JobCompletedHandlerImpl());
factoryBean.setMasterChangeListeners(new MasterChangeListener[]{
new MasterNodeChangeListener()
});
Properties configs = new Properties();
configs.setProperty("job.fail.store", "leveldb");
factoryBean.setConfigs(configs);
factoryBean.afterPropertiesSet();
factoryBean.start();
return factoryBean.getObject();
}

}
========================================
MasterNodeChangeListener.java
========================================
@MasterNodeListener
public class MasterNodeChangeListener implements MasterChangeListener {

private static final Logger LOGGER = LoggerFactory.getLogger(MasterNodeChangeListener.class);

/**
* @param master master节点
* @param isMaster 表示当前节点是不是master节点
*/
@Override
public void change(Node master, boolean isMaster) {
// 一个节点组master节点变化后的处理 , 譬如我多个JobClient, 但是有些事情只想只有一个节点能做。
if (isMaster) {
LOGGER.info("我变成了节点组中的master节点了, 恭喜, 我要放大招了");
} else {
LOGGER.info(StringUtils.format("master节点变成了{},不是我,我不能放大招,要猥琐", master));
}
}
}
========================================
JobRunnerDispatcher.java
========================================
/**
* 总入口,在 taskTracker.setJobRunnerClass(JobRunnerDispatcher.class)
* JobClient 提交 任务时指定 Job 类型 job.setParam("type", "aType")
*/
public class JobRunnerDispatcher implements JobRunner {

private static final ConcurrentHashMap<String, JobRunner>
JOB_RUNNER_MAP = new ConcurrentHashMap<String, JobRunner>();

static {
JOB_RUNNER_MAP.put("aType", new JobRunnerA()); // 也可以从Spring中拿
JOB_RUNNER_MAP.put("bType", new JobRunnerB());
}

@Override
public Result run(JobContext jobContext) throws Throwable {
Job job = jobContext.getJob();
String type = job.getParam("type");
return JOB_RUNNER_MAP.get(type).run(jobContext);
}
}

class JobRunnerA implements JobRunner {
@Override
public Result run(JobContext jobContext) throws Throwable {
// A类型Job的逻辑
Result result = new Result(Action.EXECUTE_SUCCESS, "执行成功");
return result;
}
}

class JobRunnerB implements JobRunner {
@Override
public Result run(JobContext jobContext) throws Throwable {
// TODO B类型Job的逻辑
return null;
}
}

========================================
JobCompletedHandlerImpl.java
========================================
public class JobCompletedHandlerImpl implements JobCompletedHandler {

@Override
public void onComplete(List<JobResult> jobResults) {
// 任务执行反馈结果处理
if (CollectionUtils.isNotEmpty(jobResults)) {
for (JobResult jobResult : jobResults) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date()) + " 任务执行完成:" + jobResult);
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值