首页 > 其他分享 >Elastic-job

Elastic-job

时间:2023-07-20 11:24:42浏览次数:24  
标签:String Elastic public cron job final jobClass

1.介绍

elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。
elastic-job主要的设计理念是无中心化的分布式定时调度框架,思路来源于Quartz的基于数据库的高可用方案。但数据库没有分布式协调功能,所以在高可用方案的基础上增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。

2.使用

需要zookeeper环境

  • pom.xml
<dependency>
    <groupId>com.dangdang</groupId>
    <artifactId>elastic-job-lite-spring</artifactId>
    <version>2.1.5</version>
</dependency>
  • application.yml
elasticjob:
  zookeeper-url: localhost:2181
  group-name: shop-job-group
jobCron:
  initSeckillProduct: 0 0/1 * * * ?
  userCache: 0 0/1 * * * ?
  • ElasticJobUtil工具类
public class ElasticJobUtil {
    public static LiteJobConfiguration createJobConfiguration(final Class<? extends SimpleJob> jobClass,
                                                               final String cron,
                                                               final int shardingTotalCount,
                                                               final String shardingItemParameters,
                                                               boolean dataflowType) {
        // 定义作业核心配置
        JobCoreConfiguration.Builder jobCoreConfigurationBuilder = JobCoreConfiguration.newBuilder(jobClass.getSimpleName(), cron, shardingTotalCount);
        if(!StringUtils.isEmpty(shardingItemParameters)){
            jobCoreConfigurationBuilder.shardingItemParameters(shardingItemParameters);
        }
        JobTypeConfiguration jobConfig = null;
        if(dataflowType){
            jobConfig = new DataflowJobConfiguration(jobCoreConfigurationBuilder.build(),jobClass.getCanonicalName(),true);
        }else {
            // 定义SIMPLE类型配置
            jobConfig = new SimpleJobConfiguration(jobCoreConfigurationBuilder.build(), jobClass.getCanonicalName());
        }
        // 定义Lite作业根配置
        LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(jobConfig).overwrite(true).build();
        return simpleJobRootConfig;
    }
    public static LiteJobConfiguration createDefaultSimpleJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron) {
        return createJobConfiguration(jobClass,cron,1,null,false);
    }
    public static LiteJobConfiguration createDefaultDataFlowJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron) {
        return createJobConfiguration(jobClass,cron,1,null,true);
    }
}
  • 配置类
@Configuration
public class BusinessJobConfig {
   
    /**
     * 方法名不能与job类名相同
     * @param registryCenter
     * @param seckillProductJob
     * @return
     */
    @Bean(initMethod = "init")
    public SpringJobScheduler initSPJob(CoordinatorRegistryCenter registryCenter, InitSeckillProductJob seckillProductJob){
        //Job的配置
        LiteJobConfiguration jobConfiguration = ElasticJobUtil.createJobConfiguration(
                                                        seckillProductJob.getClass(), //任务类的字节码
                                                        seckillProductJob.getCron(), //任务类cron表达式
                                                        3, //分片个数
                                                        "0=10,1=12,2=14", //分片参数
                                                        false); //不是dataflow类型
        SpringJobScheduler springJobScheduler = new SpringJobScheduler(seckillProductJob, registryCenter,jobConfiguration );
        return springJobScheduler;
    }
}
  • zookeeper配置类
@Configuration
public class RegistryCenterConfig {
    @Bean(initMethod = "init")
    public CoordinatorRegistryCenter createRegistryCenter(@Value("${elasticjob.zookeeper-url}") String zookeeperUrl, @Value("${elasticjob.group-name}") String groupName) {
        //zk的配置
        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(zookeeperUrl,groupName);
        //设置zk超时时间
        zookeeperConfiguration.setSessionTimeoutMilliseconds(100);
        //创建注册中心
        CoordinatorRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
        return zookeeperRegistryCenter;
    }
}
  • job任务类
@Component
@Setter
@Getter
public class InitSeckillProductJob implements SimpleJob {

    @Value("${jobCron.initSeckillProduct}")
    private String cron;

    /**
     * 使用定时任务 把数据库中的产品放入缓存
     * @param shardingContext
     */
    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("线程名" + Thread.currentThread() + " 分片参数 " + shardingContext.getShardingParameter());
       
    }
}

标签:String,Elastic,public,cron,job,final,jobClass
From: https://www.cnblogs.com/lwx11111/p/17567817.html

相关文章

  • Elasticsearch查询
    Elasticsearch查询什么是Elasticsearch?Elasticsearchisareal-time,distributedstorage,search,andanalyticsengineElasticsearch是一个实时的分布式存储、搜索、分析的引擎。介绍那儿有几个关键字:实时分布式搜索分析于是我们就得知道Elasticsearch......
  • Linux系统Apache添加监听端口后无法启动服务并报错:Job for httpd.service failed beca
    导言:这是SELinux安全机制导致的。解决方法:1.查看当前httpd端口#semanageport-l|grephttp2.将对应端口加入SELinux,以8068为例#semanageport-a-thttp_port_t-ptcp80683.再次查看#semanageport-l|grephttp4.重启Apache服务#systemctlrestarth......
  • elasticsearch 聚合函数求和、求平均值
    按dlmc字段分组,对tbmj字段求和、求平均值{"aggs":{"group_by_dlmc_sum":{"terms":{"size":1000,"field":"dlmc.keyword"},......
  • elasticsearch 设置自定义分词
    要在Elasticsearch中使用MySQL数据库中定义的分词,你需要执行以下步骤:将MySQL数据库中的分词数据导入到Elasticsearch中:从MySQL数据库中提取分词数据,包括分词规则、停用词等。将这些数据转换为适合Elasticsearch使用的格式,例如JSON。使用Elasticsearch的API(如BulkAPI)将分词......
  • 4.ElasticSearch~进阶(二)
    1、aggregation(执行聚合)聚合提供了从数据中分组和提取数据的能力。最简单的聚合大致等于SQL的聚合函数。在ElasticSearch中,你有执行搜索返回hit,并且同时返回聚合结果,把一个响应中所有hits分隔开的能力,这是非常强大且有效的。您可以执行查询和多个聚合并且在一次使用中得到各自......
  • 3.ElasticSearch~进阶
    ES支持两种基本方式检索:一个是通过使用RESTrequestURI来发送搜索参数(uri+检索参数)GETbank/_search?q=*&sort=account_number:asc另一个是通过RESTrequestbody来发送他们(uri+请求体)GETbank/_search{"query":{"match_all":{}},"sort":[{"balance&qu......
  • ElasticSearch安装中文分词器(插件)、分词测试
    https://github.com/medcl/elasticsearch-analysis-ik分词测试:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices-analyze.html请求URL:http://127.0.0.1:9200/_analyze请求方式:POST请求体/类型(JSON):{"analyzer":"ik_max_word",......
  • ElasticSearch-Mapping类型映射-增删改查
    https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping.html7.x版本后默认都是_doc类型增加Mapping映射先说一个特殊的字段_all:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping-all-field.html#mapping-all-field_all字段是一个特......
  • 初始elasticSearch
    elasticSearch大致印象为什么用?mysql更擅长于crud等操作,当一张表达到百万级别时,检索速度过慢es检索速度快基本概念Index索引(两层意思)动词:类似mysql的insert名词:类似mysql的数据库type类型:类似mysql的具体表(指定了保存数据的类型,联系到了orm)Document文......
  • Elasticsearch date数据类型
    时间和日期类型是我们作为开发每天都会遇到的一种常见数据类型。和Java中有所不同,Elasticsearch 在索引创建之前并不是必须要创建索引的mapping。关系型数据库的思维就是在于写入数据之前,并不强制创建表结构。我们不用事先声明字段名称,字段类型以及长度等属性就可以直接向一个不......