当前位置: 首页 > news >正文

SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示

前提:zookeeper安装并成功运行

1 pom依赖

<dependency><groupId>com.github.kuhn-he</groupId><artifactId>elastic-job-lite-spring-boot-starter</artifactId><version>2.1.53</version>
</dependency>

2 yml配置

#演示静态任务
elaticjob:zookeeper:server-lists: 127.0.0.1:2181namespace: synctask#演示动态定时任务案例
dynamiczk: 127.0.0.1:2181
dynamicnamespace: dynamictask


手动任务,分片任务演示

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.elasticjob.lite.annotation.ElasticSimpleJob;
import com.example.sdfsdfsdfsf_renwu.mapper.TbShopMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/**** 1:执行周期* 2:分片* 3:指定Zookeeper中的命名空间*/
@ElasticSimpleJob(cron = "0/5 * * * * ?",jobName = "firstJob_1",shardingTotalCount = 3,jobParameter = "测试参数",shardingItemParameters = "0=zhangsan,1=lishi,2=wangwu")
@Component
@Slf4j
public class StaticJobTask implements SimpleJob {@Autowiredprivate TbShopMapper tbShopMapper;//执行的作业@Overridepublic void execute(ShardingContext shardingContext) {log.info("\nThread ID: {}\n任务总片数: {}\n当前分片项: {}\n当前参数: {}\n当前任务名称: {}\n当前任务参数: {}\n当前任务的id: {}\n",//获取当前线程的idThread.currentThread().getId(),//获取任务总片数shardingContext.getShardingTotalCount(),//获取当前分片项shardingContext.getShardingItem(),//获取当前的参数shardingContext.getShardingParameter(),//获取当前的任务名称shardingContext.getJobName(),//获取当前任务参数shardingContext.getJobParameter(),//获取任务的idshardingContext.getTaskId());}
}



动态添加执行任务演示


a zookeeper配置类

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
public class DynamicConfig {@Value("${dynamiczk}")private String dynamiczk;@Value("${dynamicnamespace}")private String dynamicnamespace;/***** 指定当前注册地址信息*/@Beanpublic ZookeeperConfiguration zookeeperConfiguration() {return new ZookeeperConfiguration(dynamiczk,dynamicnamespace);}/***** 向Zookeeper服务注册*/@Bean(initMethod = "init")public ZookeeperRegistryCenter zookeeperRegistryCenter(ZookeeperConfiguration zookeeperConfiguration){return new ZookeeperRegistryCenter(zookeeperConfiguration);}
}

b 执行任务的逻辑

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;public class DynamicJob implements SimpleJob {//执行的作业@Overridepublic void execute(ShardingContext shardingContext) {System.out.println("执行任务的逻辑");}
}

c 任务作业创建

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.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class DynamicTaskCreate {@Autowiredprivate ZookeeperRegistryCenter zookeeperRegistryCenter;/**** 作业创建* @param jobName:作业名字* @param cron:表达式* @param shardingTotalCount:分片数量* @param instance:作业实例* @param parameters:额外参数*/public void create(String jobName, String cron, int shardingTotalCount, SimpleJob instance,String parameters){//1.配置作业->Builder->构建:LiteJobConfigurationLiteJobConfiguration.Builder builder = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobName,cron,shardingTotalCount).jobParameter(parameters).build(),instance.getClass().getName())).overwrite(true);LiteJobConfiguration liteJobConfiguration = builder.build();//2.开启作业new SpringJobScheduler(instance,zookeeperRegistryCenter,liteJobConfiguration).init();}
}

d 创建作业任务的入口

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 动态添加任务*/
@RestController
public class Controller_1 {@Autowiredprivate DynamicTaskCreate dynamicTaskCreate;@RequestMapping("/addTask")public void addTask(SeckillActivity seckillActivity){//创建任务调度,活动结束的时候执行SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ss mm HH dd MM ? yyyy");String cron = simpleDateFormat.format(seckillActivity.getEndTime());System.out.println("cron:"+cron);//cron="3/3 * * * * ? *";dynamicTaskCreate.create("renwu_"+seckillActivity.getId(),cron,1,new DynamicJob(),"xingming=zhangsan");}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • py3.7.4离线安装openpyxl等错误,无法安装openpyxl...
  • yolo5图片视频、摄像头推理demo
  • Unity UGUI 之 ScrollBar与ScrollView
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号2
  • 生成式人工智能之路,从马尔可夫链到生成对抗网络
  • 探索LLM世界:新手小白的学习路线图
  • 密码学
  • 可能造成z-index小的元素显示在z-index大的元素上方的原因
  • 无法连接到internet怎么办?已连接但无internet访问,其实并不难
  • uniapp从入坑到出土(2-初始化你的uniapp项目)
  • mac本安装brew
  • 代码随想录算法训练营第40天 | 第九章 动态规划12
  • 【计算机视觉】基本概念和应用
  • IP数据报结构详解:从基础到进阶
  • 大数据技术--实验01-Hadoop的安装与使用【实测可行】
  • #Java异常处理
  • 2017年终总结、随想
  • CSS 三角实现
  • ES6系列(二)变量的解构赋值
  • Java多线程(4):使用线程池执行定时任务
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Map集合、散列表、红黑树介绍
  • npx命令介绍
  • 两列自适应布局方案整理
  • 前端
  • 如何使用 JavaScript 解析 URL
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 事件委托的小应用
  • 学习使用ExpressJS 4.0中的新Router
  • 怎么把视频里的音乐提取出来
  • 2017年360最后一道编程题
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Spring Batch JSON 支持
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #07【面试问题整理】嵌入式软件工程师
  • #NOIP 2014# day.2 T2 寻找道路
  • (0)Nginx 功能特性
  • (2015)JS ES6 必知的十个 特性
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot教学评价 毕业设计 641310
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .dwp和.webpart的区别
  • .gitignore文件忽略的内容不生效问题解决
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Core 中间件与过滤器
  • .NET Core中的去虚
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET的数据绑定