Elastic-job系列(二)-------- simple类型作业

一、简介
            esjob的作业类型有三种,分别是Simple、Dataflow和Script。本文主要介绍基于springboot的simple类型的作业。以及控制台的使用。作业名称为simpleJobDemo.

二、Simple作业
2.0 结构图

Elastic-job系列(二)-------- simple类型作业_第1张图片
2.1 pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.example
    demo
    0.0.1-SNAPSHOT
    elasticjob
    elasticjob

    
        1.8
    

    

        
            org.springframework.boot
            spring-boot-starter
            
            
            
            
            
            
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.dangdang
            elastic-job-lite-core
            2.1.5
        
        
            com.dangdang
            elastic-job-lite-spring
            2.1.5
        

        
        
            org.projectlombok
            lombok
            1.16.18
            provided
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



2.2 application.yml
 

spring:
  application:
  name: springboot2_elasticjob
# zk注册中心配置相关
reg-center:
  # 连接Zookeeper服务器的列表IP:端口号,多个地址用逗号分隔
  server-list: "47.93.136.219:2181"
  # Zookeeper的命名空间
  namespace: zk-elastic-job
  # 等待重试的间隔时间的初始值 默认1000,单位:毫秒
  baseSleepTimeMilliseconds: 1000
  # 等待重试的间隔时间的最大值 默认3000,单位:毫秒
  maxSleepTimeMilliseconds: 3000
  # 最大重试次数 默认3
  maxRetries: 3
  # 会话超时时间 默认60000,单位:毫秒
  sessionTimeoutMilliseconds: 60000
  # 连接超时时间 默认15000,单位:毫秒
  connectionTimeoutMilliseconds: 15000
  # 连接Zookeeper的权限令牌 默认不需要
  #digest:


# simpleJobDemo作业配置相关
simpleJobDemo:
  # cron表达式,用于控制作业触发时间
  cron: 0/30 * * * * ?
  # 作业分片总数
  sharding-total-count: 3
  # 分片序列号和参数用等号分隔,多个键值对用逗号分隔.分片序列号从0开始,不可大于或等于作业分片总数
  sharding-item-parameters: 0=A,1=B,2=C
  # 作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业
  job-parameter: "simpleJobDemo作业参数"
  # 是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行, 默认为false
  failover: true
  # 是否开启错过任务重新执行 默认为true
  misfire: true
  # 作业描述信息
  job-description: "simpleJobDemo作业描述"


注:此处配置了zk注册中心,然后配置了一个名为simpleJobDemo的simle类型的作业

 

2.3 Zk注册中心配置类

 

package com.example.demo.config;

import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
class ZkRegistryCenterConfig {


    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter regCenter(@Value("${reg-center.server-list}") final String serverList,
                                             @Value("${reg-center.namespace}") final String namespace) {
        return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
    }

}


注: 此处配置了zk注册中心。如果zookeeper不会搭建的话可以参考博主的另一篇文章  linux下安装zookeeper集群 。

2.4 全局作业配置中心类

package com.example.demo.config;

import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.api.JobScheduler;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import com.example.demo.jobs.SimpleJobDemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description:
 * @Author: zhihua
 * @Date: 2019/9/20
 */

@Configuration
public class ElasticJobConfig {
    @Value("${simpleJobDemo.cron}")
    private  String cron;
    @Value("${simpleJobDemo.sharding-total-count}")
    private  int shardingTotalCount;
    @Value("${simpleJobDemo.sharding-item-parameters}")
    private  String shardingItemParameters;
    @Value("${simpleJobDemo.job-parameter}")
    private  String jobParameters;

    @Autowired
    private ZookeeperRegistryCenter regCenter;

    @Bean
    public SimpleJob stockJob() {
        return new SimpleJobDemo();
    }

    @Bean(initMethod = "init")
    public JobScheduler simpleJobScheduler(final SimpleJob simpleJob) {
        return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(),
                cron, shardingTotalCount, shardingItemParameters, jobParameters));
    }

    private LiteJobConfiguration getLiteJobConfiguration(final Class jobClass,
                                                         final String cron,
                                                         final int shardingTotalCount,
                                                         final String shardingItemParameters,
                                                         final String jobParameters) {
        // 定义作业核心配置
        JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount).
                shardingItemParameters(shardingItemParameters).jobParameter(jobParameters).build();
        // 定义SIMPLE类型配置
        SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, jobClass.getCanonicalName());
        // 定义Lite作业根配置
        LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build();
        return simpleJobRootConfig;

    }
}


 
 

2.6 SimpleJobDemo执行类

package com.example.demo.jobs;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;

import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

/**
 * @Description:
 * @Author: zhihua
 * @Date: 2019/9/20
 */

@Slf4j
public class SimpleJobDemo implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {

        log.info(String.format("Thread ID: %s, 作业分片总数: %s, " +
                        "当前分片项: %s.当前参数: %s," +
                        "作业名称: %s.作业自定义参数: %s"
                ,
                Thread.currentThread().getId(),
                shardingContext.getShardingTotalCount(),
                shardingContext.getShardingItem(),
                shardingContext.getShardingParameter(),
                shardingContext.getJobName(),
                shardingContext.getJobParameter()
        ));

    }
}


2.7 执行
启动项目,可以看到输入如下内容:

2019-10-09 11:08:30.229  INFO 21432 --- [SimpleJobDemo-5] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 54, 作业分片总数: 3, 当前分片项: 0.当前参数: A,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:08:30.230  INFO 21432 --- [impleJobDemo-11] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 60, 作业分片总数: 3, 当前分片项: 1.当前参数: B,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:08:30.230  INFO 21432 --- [impleJobDemo-19] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 68, 作业分片总数: 3, 当前分片项: 2.当前参数: C,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:00.232  INFO 21432 --- [impleJobDemo-13] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 62, 作业分片总数: 3, 当前分片项: 0.当前参数: A,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:00.232  INFO 21432 --- [impleJobDemo-12] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 61, 作业分片总数: 3, 当前分片项: 1.当前参数: B,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:00.232  INFO 21432 --- [impleJobDemo-13] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 62, 作业分片总数: 3, 当前分片项: 2.当前参数: C,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:30.228  INFO 21432 --- [impleJobDemo-21] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 70, 作业分片总数: 3, 当前分片项: 0.当前参数: A,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:30.229  INFO 21432 --- [impleJobDemo-14] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 63, 作业分片总数: 3, 当前分片项: 1.当前参数: B,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:09:30.229  INFO 21432 --- [SimpleJobDemo-1] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 50, 作业分片总数: 3, 当前分片项: 2.当前参数: C,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:10:00.217  INFO 21432 --- [impleJobDemo-22] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 71, 作业分片总数: 3, 当前分片项: 0.当前参数: A,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:10:00.218  INFO 21432 --- [impleJobDemo-15] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 64, 作业分片总数: 3, 当前分片项: 1.当前参数: B,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数
2019-10-09 11:10:00.218  INFO 21432 --- [impleJobDemo-23] com.example.demo.jobs.SimpleJobDemo      : Thread ID: 72, 作业分片总数: 3, 当前分片项: 2.当前参数: C,作业名称: com.example.demo.jobs.SimpleJobDemo.作业自定义参数: simpleJobDemo作业参数


 

三、查看控制台
3.1 进入控制台,添加注册中心

Elastic-job系列(二)-------- simple类型作业_第2张图片
提交之后全局配置上面会变为1,0. 如下图: 

Elastic-job系列(二)-------- simple类型作业_第3张图片

此时,点击链接,则如下图:检测到了一个作业: 

3.2 查看作业
点击作业维度,如下图:

Elastic-job系列(二)-------- simple类型作业_第4张图片

注: 可以看到有好多操作。都可以操作。此时状态是正常,如果服务关停,则过段时间刷新后状态会变味已下线。

查看作业详情页:

 注: 在此处,可以看到作业的执行情况。等待运行,运行中等。
 

你可能感兴趣的:(Elastic-job,java)