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);
            }
        }
    }
}

猜你喜欢

转载自samson870830.iteye.com/blog/2387575