当当的elastic-job定时任务

业务场景是定时从微信取accesstoken和jsticket,因为都只有7200秒的有效时间,所以设置了定时任务,定时将得到的数据存到redis缓存中

问题1:但是刚开始的时候将业务写在实现了simplejob类的类中,需要注入RedisCacheManager,结果发现是不能拿到的

所以更改了配置文件jobRegisterSupport

问题2:而且这个工作类的cron不管本地怎么改都不能改动,因为数据是从注册中心拿到的,所以在jobconfiguration中配置了overwrite为true,这样可以覆盖掉注册中心的配置

Elastic-Job-Lite采用无中心化设计,若每个客户端的配置不一致,不做控制的话,最后一个启动的客户端配置将会成为注册中心的最终配置。
Elastic-Job-Lite提出了overwrite概念,可通过JobConfiguration或Spring命名空间配置。overwrite=true即允许客户端配置覆盖注册中心,反之则不允许。如果注册中心无相关作业的配置,则无论overwrite是否配置,客户端配置都将写入注册中心。

原先的:

 @Bean
public JobRegisterSupport jobRegisterSupport(CoordinatorRegistryCenter coordinatorRegistryCenter, ApplicationContextOwner applicationContextOwner){
ElasticJobClassScanner scanner = new ElasticJobClassScanner();
scanner.addIncludeFilter(new AssignableTypeFilter(ElasticJob.class) {
@Override
protected boolean matchClassName(String className) {
return false;
}
});
scanner.addExcludeFilter(new AnnotationTypeFilter(JobExclude.class) {
@Override
protected boolean matchClassName(String className) {
return false;
}
});
Set<Class> classes = scanner.doScan("*.*.jobInstance");//自己的工作类
classes.forEach(clazz ->Arrays.stream(JobConfig.JobElement.values()).forEach(jobElement -> {
if (clazz == jobElement.getJobClass()){
JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder(jobElement.getJobName(), jobElement.getCron(), jobElement.getShardingTotalCount()).build();
SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration, clazz.getCanonicalName());
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfiguration).build();
JobScheduler jobScheduler = new JobScheduler(coordinatorRegistryCenter, simpleJobRootConfig);
jobScheduler.init();
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContextOwner.getApplicationContext().getAutowireCapableBeanFactory();
beanFactory.registerSingleton(clazz.getCanonicalName(),jobScheduler);
return;
}
}));
return new JobRegisterSupport();
}

改过的:

@Bean
public JobRegisterSupport jobRegisterSupport(CoordinatorRegistryCenter coordinatorRegistryCenter, ApplicationContextOwner applicationContextOwner){
ElasticJobClassScanner scanner = new ElasticJobClassScanner();
scanner.addIncludeFilter(new AssignableTypeFilter(ElasticJob.class) {
@Override
protected boolean matchClassName(String className) {
return false;
}
});
scanner.addExcludeFilter(new AnnotationTypeFilter(JobExclude.class) {
@Override
protected boolean matchClassName(String className) {
return false;
}
});
Set<Class> classes = scanner.doScan("*.*.job.jobInstance");
classes.forEach(clazz ->Arrays.stream(JobConfig.JobElement.values()).forEach(jobElement -> {
if (clazz == jobElement.getJobClass()){
JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder(jobElement.getJobName(), jobElement.getCron(), jobElement.getShardingTotalCount()).build();
SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration, clazz.getCanonicalName());
LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(simpleJobConfiguration).overwrite(true).build();//加入了覆盖
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContextOwner.getApplicationContext().getAutowireCapableBeanFactory();
AbstractBeanDefinition ActualRawBeanDefinition = BeanDefinitionBuilder.genericBeanDefinition(clazz).setScope(BeanDefinition.SCOPE_SINGLETON).getRawBeanDefinition();
beanFactory.registerBeanDefinition(clazz.getCanonicalName(),ActualRawBeanDefinition);
SpringJobScheduler springJobScheduler = new SpringJobScheduler((SimpleJob)beanFactory.getBean(clazz), coordinatorRegistryCenter, liteJobConfiguration);
springJobScheduler.init();
beanFactory.registerSingleton("spring" + clazz.getCanonicalName(),springJobScheduler);
return;
}
}));
return new JobRegisterSupport();
}

记一次elastic-job使用的更多相关文章

  1. 记一次ElasticSearch重启之后shard未分配问题的解决

    记一次ElasticSearch重启之后shard未分配问题的解决 环境 ElasticSearch6.3.2,三节点集群 Ubuntu16.04 一个名为user的索引,索引配置为:3 primar ...

  2. ELASTIC API

    运维常用API. curl -XGET 'localhost:9200/_cat/indices?v&pretty' #查看索引 curl -XGET 'localhost:9200/_cat ...

  3. 记一次OutOfMemory定位过程-续

    在前文<记一次OutOfMemory定位过程>完成时最终也没有定位到ECS 中JVM Heap size无法控制的原因,今天再次尝试终于有了一些线索,翻查了ECS的部署脚本发现了memor ...

  4. 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用

    转自:https://mp.weixin.qq.com/s/9IKaXeWTiiQTFlvZzxgsEA 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使 ...

  5. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  6. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  7. 这些年一直记不住的 Java I/O

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

  8. 千回百折:百度Java研发offer斩获记和经验分享

    起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...

  9. 记一次nginx部署yii2项目时502 bad gateway错误的排查

    周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...

  10. 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...

随机推荐

  1. Stream 分布式数据流的轻量级异步快照

    1. 概述 分布式有状态流处理支持在云中部署和执行大规模连续计算,主要针对低延迟和高吞吐量.这种模式的一个最根本的挑战就是在可能的失败情况下提供处理保证.现有方法依赖于可用于故障恢复的周期性全局状态快 ...

  2. pg数据库data文件夹达到32G

    最近工作中遇到pg数据库data文件夹大小达到32G,大致的排查流程如下: 1.首先查看是哪个文件或者那些文件比较大: 2.根据文件的名称找到对应的数据表a: 3.确认数据表a中数据实际上只有3000 ...

  3. 配置Linux静态IP地址

  4. wiki部署

      一.准备环节 1.上传软件   [root@web01 tools]# tar xf jdk-8u60-linux-x64.tar.gz -C /application/ [root@web01 ...

  5. 小米Air 13.3 安装Arch Linux

    0. 前言 最近新买了一台小米Air 13.3,除了但键盘手感外都比较满意.我比较喜欢折腾Linux,但又不想放弃原有的Windows 10 Home,于是在原有的windows 10基础上再安装了A ...

  6. javascript模板字符串(标签函数)

    前面介绍了javascript的模板字符串的基本知识,今天深入学习一下标签函数 模板字符串概述 这里先简单说一下模板字符串的概念 1.模板字符串,从名字上可以得出其实返回的是字符串,普通使用其实就想引 ...

  7. 一、Flux 是什么?

    React 本身只涉及UI层,如果搭建大型应用,必须搭配一个前端框架.也就是说,你至少要学两样东西,才能基本满足需要:React + 前端框架. Facebook官方使用的是 Flux 框架.本文就介 ...

  8. MHA监控进程异常退出(MHA版本:0.56)

    最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...

  9. MyEclipse开发秘籍——使用DevStyle Icon Designer(一)

    [MyEclipse CI 2019.4.0安装包下载] DevStyle主题包括一个Icon Designer,允许您自定义图标.Icon Designer包含在DevStyle主题中,可作为Ecl ...

  10. 使用Vue自定义组件时,报did you register the component correctly? For recursive components, make sure to provide the "name" option.(未注册组件)的原因之一

    错误信息: [Vue warn]: Unknown custom element: <list> - did you register the component correctly? F ...