`

LTS:spring

    博客分类:
  • LTS
阅读更多
在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);
            }
        }
    }
}
分享到:
评论

相关推荐

    Spring-Framework-5.2.x Maven版本

    - **Java 11支持**:Spring 5.2.x开始支持Java 11,这是一个长期支持(LTS)版本,为开发者提供了更多现代语言特性和性能改进。 - **Spring Expression Language (SpEL)增强**:SpEL在5.2.x中进行了扩展,添加了更...

    spring-framework4.3.4 所有jar包

    10. **兼容性和稳定性**:4.3.4是一个长期支持(LTS)版本,意味着它将获得更长时间的安全更新和支持,确保了应用的稳定性和安全性。 在实际开发中,了解并熟练运用这些知识点,将有助于构建高效、稳定的Spring应用。...

    Sentinel-LTS:源自https

    6. **与 Spring Cloud 的集成**:Sentinel 提供了对 Spring Cloud 的集成,使得在 Spring Cloud 生态系统中使用 Sentinel 成为可能,便于实现服务治理。 7. **数据源适配**:Sentinel 支持从不同的数据源动态加载...

    spring官网下载jar包

    通常,推荐使用最新的LTS(长期支持)版本。 - **Spring Boot**:Spring Boot是基于Spring Framework的一个快速开发框架,它简化了创建独立的、生产级别的基于Spring的应用程序。Spring Boot项目通常通过start....

    spring-boot-2.5.0.zip

    同时,它还增加了对LTS(长期支持)Java版本的支持。 3. **Spring WebFlux增强**:此版本增强了对Reactive编程的支持,特别是Spring WebFlux模块,提供了更好的错误处理机制和反应式客户端库的支持。 4. **...

    spring-framework-4.3.6.RELEASE-dist和commons-logging-1.2-bin.zip

    4.3.x系列是4.x线上的长期支持(LTS)版本,这意味着它会持续接收安全更新和关键错误修复。以下是一些关键知识点: 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,通过DI,对象的依赖关系由...

    基于 Java 17 + Spring Boot 3 + Spring Security 6 + Vue 3 + E.zip

    1. **Java 17**: Java 17,也称为Java SE 17,是Oracle公司发布的长期支持(LTS)版本。它带来了增强的安全性、性能优化和新特性,例如Sealed Classes,为代码封装提供更细粒度的控制;Record类,简化数据结构的表示...

    java+jdk17+springboot3

    1. **Java 17兼容**:作为JDK 17的LTS版本,Spring Boot 3.x 将确保与之完美兼容,提供最佳的开发体验。 2. **Spring Framework 6.x**:Spring Boot 3.x 很可能基于Spring Framework的最新版本,带来性能优化和新...

    Java17、SpringBoot、SpringCloud、MySQL、Redis.zip

    **Java 17**: Java 17(代号为"Temurin")是Java平台的标准版(JDK)的最新长期支持(LTS)版本。它带来了许多增强和性能优化,包括更强的类型推断、密封类、记录类、开关表达式等新特性。安全性、垃圾收集和内存...

    基于 Java 使用 Spring Boot 3 和 JDK 17.zip

    JDK 17,作为Java的长期支持(LTS)版本,带来了许多性能增强和新的语言特性。例如,Switch表达式在JDK 17中已经完全成熟,提供了更简洁的代码结构;文本块(Text Blocks)允许更直观地处理多行字符串,减少了转义...

    anan基于JDK11、Spring Boot 2.5.x、Spring Cloud 生态体系技术,采用微服务前后端.zip

    - JDK11是Oracle在2018年9月发布的长期支持(LTS)版本,提供了许多新特性,包括模块化系统(Project Jigsaw)、局部变量类型推断(var关键字)、HTTP客户端API、改进的字符串处理等。 - 使用JDK11可以确保项目...

    MyBatis+Spring整合jar包

    Spring4.3.7是一个长期支持(LTS)版本,具有良好的稳定性和兼容性,它引入了新的注解,如`@Nullable`和`@NonNull`,增强了对Java 8的支持,以及对WebFlux非阻塞处理的支持。 **MyBatis与Spring的整合** 主要体现在...

    Spring Boot参考指南(最新版).pdf

    - Java版本:推荐使用最新的Java LTS版本。 - **安装Spring Boot**: - **Maven安装**: 在`pom.xml`中添加Spring Boot的依赖。 - **Gradle安装**: 在`build.gradle`文件中添加依赖。 - **Spring Boot CLI**: 提供...

    lts分布式任务调度系统

    例如,`lts-example-jobclient-spring-annotation.rar`这个文件很可能是LTS的一个示例项目,它演示了如何使用Spring注解来配置和启动任务客户端。Spring注解简化了任务的声明和依赖注入,使得开发人员可以快速地将...

    SpringCloud集成Python-1017

    在Python方面,我们使用的是3.6.3版本,这是一个较新的长期支持(LTS)版本,拥有良好的性能和兼容性。Python的Web服务通常可以由Flask或Django等框架提供,这些框架能够快速构建RESTful API,并且易于与其他语言...

    这是springboot创建项目的初始源码

    Java 11是长期支持(LTS)版本,提供了许多新特性,比如局部变量类型推断(var关键字)、HTTP客户端API等。 6. **项目结构**:一个标准的Spring Boot项目通常包含`src/main/java`下的源代码目录,`src/main/...

    LTS_app:LTS公司采购部门的源代码-Source code purchase

    1. **框架选择**:开源项目通常基于流行的开发框架构建,如Spring Boot、Django或Node.js等。这些框架提供了快速开发和可扩展性的基础,同时具有丰富的生态系统和社区支持。 2. **数据库管理**:采购过程涉及大量的...

    SkyFire_548:SkyFireEMU是功能齐全的魔兽世界:用C ++编写的Pandaria迷雾模拟器。 || 兼容于《魔兽世界》客户端5.4.8(内部版本:18414)项目,成立于2011年|| 在Discord https:discord.ggDnKZycD上的支持

    项目信息 SkyFire是主要基于C ++的MMORPG框架。 SkyFireEMU是主要基于C ++的MMORPG框架。 它是完全开源的,并得到... Ubuntu 18.04 LTS:x86_32,x86_64 Ubuntu 20.04 LTS:x86_32,x86_64 Debian: Debian GNU / L

    spring-boot-cli-1.5.9.RELEASE-bin.zip

    - `spring-boot-cli-1.5.9.RELEASE`版本意味着这是Spring Boot 1.5.x系列的一个稳定发布,1.5.x系列是一个长期支持(LTS)版本。 - Spring Boot遵循严格的版本策略,1.x版本主要关注Java 8,而2.x版本则支持Java ...

Global site tag (gtag.js) - Google Analytics