Springboot + Elasticjob-lite 3.x + Elasticjob-lite-UI可视化

关于ElasticJob

ElasticJob 曾作为当当旗下的开源产品大受欢迎,和 xxl-job 一样都是基于 Quartz 实现的定时调度平台。后来停止运维了几年,最近两年又开始重新维护并成为了 apache 的子项目。
官网地址
根据官网的介绍,Elasticjob具有以下功能(包含开发中的功能):

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

DEMO

环境要求

JAVAJava 8 及其以上版本
MAVEN3.5.0及其以上版本
Zookeeper3.6.0及其以上版本

Demo

pom.xml
		...
        <dependency>
            <groupId>org.apache.shardingsphere.elasticjob</groupId>
            <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
            <version>3.0.1</version>
        </dependency>
        ...
创建作业

简单作业

import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MyElasticJob implements SimpleJob {
    /**
     * 要调度的具体任务,时间段轮循
     */
    @Override
    public void execute(ShardingContext shardingContext) {
        log.info(String.format("定时任务-测试%s %s %d",shardingContext.getJobName(),shardingContext.getTaskId() ,shardingContext.getShardingItem()));
    }
}

数据流作业

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Slf4j
@Component
public class SpringBootDataflowJob implements DataflowJob<String> {

    @Override
    public List<String> fetchData(final ShardingContext shardingContext) {
        List<String> dex = new ArrayList<>();
        dex.add(UUID.randomUUID().toString());
        dex.add(UUID.randomUUID().toString());
        dex.add(UUID.randomUUID().toString());
        return dex;
    }

    @SneakyThrows
    @Override
    public void processData(final ShardingContext shardingContext, final List<String> data) {
        for (String each : data) {
            log.info(String.format("定时任务-测试%s %s %d %s",shardingContext.getJobName(),shardingContext.getTaskId() ,shardingContext.getShardingItem(),each));
        }
    }
}
使用 Spring Boot Starter 的方式配置作业

环境配置文件中添加配置:spring.profiles.include=job

server:
  port: 15999
spring:
  profiles:
    include: job
  application:
    name: elastic-service
  datasource:
    url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/elastic_job?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF8&useSSL=false
    driverClassName: com.mysql.cj.jdbc.Driver
    username: root
    password: password

添加application-job.yml

elasticjob:
  reg-center:
    serverLists: 127.0.0.1:2181
    namespace: elastic-job-lite
    base-sleep-time-milliseconds: 1000
    max-sleep-time-milliseconds: 3000
    max-retries: 3
  jobs:
    testJobCronTrigger1:
      elasticJobClass: com.dm.cloud.tasks.MyElasticJob
      cron: 0/15 * * * * ?
      timeZone: GMT+08:00
      shardingTotalCount: 3
      shardingItemParameters: 0=0,1=1,2=2
    testJobCronTrigger2:
      elasticJobClass: com.dm.cloud.tasks.SpringBootDataflowJob
      cron: 0 0/30 * * * ?
      timeZone: GMT+08:00
      shardingTotalCount: 1
      shardingItemParameters: 0=0
启动项目

启动项目等待作业运行
可以启动多个项目键查看分片执行是否正常在这里插入图片描述

可视化安装

下载源码
正常按照官方提示就操作就可以了

但是我这里失败了。。。
原因大致是因为在处理前端的时候时候缺各种命令,搜索之后无果,本人对前端环境这块接触较少,而且要添加 mysqljdbc 驱动,要不然前端UI界面选不到mysql驱动,添加不了mysql数据源,最后决定自己修改代码打包发布。

后端打包启动

修改pom文件,添加mysql数据驱动,修改maven扩展

 <dependencies>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>8.0.13</version>
     </dependency>
 </dependencies>
...
 <build>
    <finalName>shardingsphere-elasticjob-lite-ui</finalName>
      <plugins>
      ...
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <version>${spring-boot.version}</version>
              <executions>
                  <execution>
                      <goals>
                          <goal>repackage</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
 </build>

修改 application.properties,这一句解屏蔽,并添加 com.mysql.cj.jdbc.Driver

## Uncomment the following property to allow adding DataSource dynamically.
dynamic.datasource.allowed-driver-classes={'org.h2.Driver','org.postgresql.Driver','com.mysql.cj.jdbc.Driver'}

执行命令打包

mvn clean package -Dmaven.test.skip=true

然后 java -jar 启动服务

前端打包部署

前端打包

cd ./shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend
npm install
npm run build

然后会生成一个 dist 文件夹。
nginx 发布一下服务

server{
  listen 2137;
  server_name elastic.test.com;
  location / {
    root E:/,,,0PersonalPro/elasticjob/shardingsphere-elasticjob-ui/shardingsphere-elasticjob-lite-ui/shardingsphere-elasticjob-lite-ui-frontend/dist;
    index index.html;
  }
  location ^~ /api/{
    proxy_pass http://127.0.0.1:8088/api/;
  }
}
访问前端

访问 http://localhost:2137/#/data-source
默认用户名密码 root root

添加注册中心
在这里插入图片描述
添加事件追踪
这里的 mysql 驱动就是我们通过修改代码后添加的,默认只有 h2postgresql
在这里插入图片描述
在这里插入图片描述
作业维度
可以查看作业状态等信息,也可以修改作业配置
在这里插入图片描述
服务器纬度
可以查看服务器作业信息
在这里插入图片描述
历史轨迹,历史状态
查看作业的执行记录
在这里插入图片描述

问题记录

1、代码修改配置文件不生效
我出现的问题是在数据库连接上没有配置时区,导致历史记录里面的时间总是少八个小时
链接上添加serverTimezone=GMT%2B8 ,设置为东八区一般就没有问题了。
但是我修改之后时间仍不正确,最后通过清空 zookeeper 里面当前 namespace下的所有节点才好。

deleteall /elastic-job-lite
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
elasticjob-lite-lifecycle 3.1.0 是一个轻量级分布式任务调度器的生命周期管理工具。它是 ElasticJob 的一个组件,可以帮助开发者更方便地管理任务的生命周期。 elasticjob-lite-lifecycle 3.1.0 提供了以下主要功能: 1. 任务的创建与注册:可以通过该工具创建任务并将其注册到 ElasticJob 中。开发者可以指定任务的名称、描述、执行模式等信息。 2. 任务的修改与更新:可以修改已注册的任务的属性,如任务的运行时间表达式、任务执行参数等。任何对任务的修改和更新都可以通过该工具进行。 3. 任务的启动与暂停:可以通过该工具对任务进行启动和暂停操作。当任务处于暂停状态时,任务调度器不会触发任务的执行。当任务处于启动状态时,任务调度器会按照设置的时间表达式来触发任务的执行。 4. 任务的删除与注销:可以通过该工具删除已创建的任务,并将其从 ElasticJob 中注销。注销后的任务将不再参与任务调度。 5. 任务的状态查询:可以查询任务的当前状态,包括是否处于启动状态、最近一次执行时间、下一次执行时间等。这些状态信息可以帮助开发者更好地监控任务的执行情况。 6. 任务的日志管理:可以通过该工具查看任务的执行日志,包括任务的执行结果、执行时间、日志级别等。这些日志信息可以帮助开发者分析任务的执行情况,排查问题。 elasticjob-lite-lifecycle 3.1.0 简化了任务的生命周期管理流程,提供了丰富的功能,使开发者可以更加方便地管理和监控任务。同时,它与 ElasticJob 的其他组件紧密结合,为分布式任务调度提供了全面的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mingvvv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值