springboot集成elasticjob

简介: springboot集成elasticjob

分布式任务是各大公司的必不可少的组件,他的特性和组件要求如下

功能列表弹性调度支持任务在分布式场景下的分片和高可用能够水平扩展任务的吞吐量和执行效率任务处理能力随资源配备弹性伸缩资源分配在适合的时间将适合的资源分配给任务并使其生效相同任务聚合至相同的执行器统一处理动态调配追加资源至新分配的任务作业治理失效转移错过作业重新执行自诊断修复作业依赖(TODO)基于有向无环图(DAG)的作业间依赖基于有向无环图(DAG)的作业分片间依赖作业开放生态可扩展的作业类型统一接口丰富的作业类型库,如数据流、脚本、HTTP、文件、大数据等易于对接业务作业,能够与 Spring 依赖注入无缝整合可视化管控端作业管控端作业执行历史数据追踪注册中心管理环境要求Java请使用 Java 8 及其以上版本。Maven请使用 Maven 3.5.0 及其以上版本。ZooKeeper请使用 ZooKeeper 3.6.0 及其以上版本。Mesos(仅 ElasticJob-Cloud 使用)请使用 Mesos 1.1.0 及其兼容版本。1首先添加pom

  <dependency>
            <groupId>org.apache.shardingsphere.elasticjob</groupId>
            <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere.elasticjob</groupId>
            <artifactId>elasticjob-lite-core</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere.elasticjob</groupId>
            <artifactId>elasticjob-simple-executor</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere.elasticjob</groupId>
            <artifactId>elasticjob-lite-spring-namespace</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-test</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.1.0</version>
        </dependency>

yaml配置

elasticjob:

 tracing:

   type: RDB
 regCenter:

   serverLists: localhost:2181

   namespace: elasticjob-lite-springboot

 jobs:

   simpleJob:

     elasticJobClass: org.microservices.pay.job.SpringBootSimpleJob

     cron: 0/5 * * * * ?

     shardingTotalCount: 3

     shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou

   dataflowJob:

     elasticJobClass: org.microservices.pay.job.SpringBootDataflowJob

     cron: 0/5 * * * * ?

     shardingTotalCount: 3

     shardingItemParameters: 0=Beijing,1=Shanghai,2=Guangzhou

simplejob


import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.microservices.pay.entity.Foo;
import org.microservices.pay.repository.FooRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Component
public class SpringBootSimpleJob implements SimpleJob {
    private final Logger logger = LoggerFactory.getLogger(SpringBootSimpleJob.class);
    @Autowired
    private FooRepository fooRepository;
    @Override
    public void execute(final ShardingContext shardingContext) {
        logger.info("Item: {} | Time: {} | Thread: {} | {}",
                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "SIMPLE");
        List<Foo> data = fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
        for (Foo each : data) {
            fooRepository.setCompleted(each.getId());
        }
    }
}

DataflowJob

@Component
public class SpringBootDataflowJob implements DataflowJob<Foo> {
    private final Logger logger = LoggerFactory.getLogger(SpringBootDataflowJob.class);
    @Resource
    private FooRepository fooRepository;
    @Override
    public List<Foo> fetchData(final ShardingContext shardingContext) {
        logger.info("Item: {} | Time: {} | Thread: {} | {}",
                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW FETCH");
        return fooRepository.findTodoData(shardingContext.getShardingParameter(), 10);
    }
    @Override
    public void processData(final ShardingContext shardingContext, final List<Foo> data) {
        logger.info("Item: {} | Time: {} | Thread: {} | {}",
                shardingContext.getShardingItem(), new SimpleDateFormat("HH:mm:ss").format(new Date()), Thread.currentThread().getId(), "DATAFLOW PROCESS");
        for (Foo each : data) {
            fooRepository.setCompleted(each.getId());
        }
    }
}

启动主类 就可以看到任务的执行信息了

相关文章
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
295 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
374 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
327 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
171 2
|
5月前
|
消息中间件 Java Kafka
集成Kafka到Spring Boot项目中的步骤和配置
集成Kafka到Spring Boot项目中的步骤和配置
271 7
|
5月前
|
druid Java 关系型数据库
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
807 5
|
5月前
|
Java 数据库连接 mybatis
在Spring Boot应用中集成MyBatis与MyBatis-Plus
在Spring Boot应用中集成MyBatis与MyBatis-Plus
125 5
|
5月前
|
前端开发 JavaScript 安全
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
集成WebSocket在Spring Boot中可以用于实现实时的双向通信
89 4
|
5月前
|
监控 前端开发 Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成

热门文章

最新文章

下一篇
无影云桌面