Springboot集成Elastic-job

ElasticJob 通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 

1 项目集成

1.1 springboot项目配置

导入依赖:

<!--mysql连接基本配置--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>

 启动类设置

1.2 设计使用Elastic-job

作业调度:创建config类,注册zookeeper

作业配置:丰富config类,设置调度执行周期

 createLiteJob创建作业

public LiteJobConfiguration createLiteJob(Class clazz,String cron,int cutNumber,String shardingParam){JobCoreConfiguration.Builder jobBuilder = JobCoreConfiguration.newBuilder(clazz.getSimpleName(),cron,cutNumber);JobCoreConfiguration simpleCoreConfig = jobBuilder.build();SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, clazz.getCanonicalName());LiteJobConfiguration simpleRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build();return simpleRootConfig;
}

作业开发:FileCustomElasticJob类,实现具体任务

@Component
public class FileCustomElasticJob implements SimpleJob {@Autowiredprivate FileCustomServiceImpl fileCustomService;@Overridepublic void execute(ShardingContext shardingContext) {dowWork();}private void dowWork() {//查询备份状态为0的任务List<FileCustom> fileCustoms = fileCustomService.selectAll();//获取该任务信息for (FileCustom fileCustom : fileCustoms) {Long id = backImg(fileCustom);if(id != -1){fileCustomService.changeStage(id,1);try {TimeUnit.SECONDS.sleep(1);System.out.println("备份完成");} catch (InterruptedException e) {e.printStackTrace();}}}}private Long backImg(FileCustom fileCustom) {Long id = fileCustom.getId();System.out.println("检查备份信息>>>>");System.out.println("备份方法名:" + fileCustom.getName());System.out.println("备份类型:" + fileCustom.getType());if(fileCustom.getType() == "img"){System.out.println("检查备份信息为img,进行备份<<<<");return id;}else {return Long.valueOf(-1);}}
}

1.3 数据库操作

实体类

1.4 运行结果 

启动zookeeper,Apache ZooKeeper

运行springboot

 2 认识分片

定义分片规则:

text 0

video 1

img 2

radio 3

单机器分片任务处理效果如下:

1)修改config代码,更改作业配置,加上分片

public LiteJobConfiguration createLiteJob(Class clazz,String cron,int cutNumber,String shardingParam){JobCoreConfiguration.Builder jobBuilder = JobCoreConfiguration.newBuilder(clazz.getSimpleName(),cron,cutNumber);if(!StringUtils.isEmpty(shardingParam)){jobBuilder.shardingItemParameters(shardingParam);}JobCoreConfiguration simpleCoreConfig = jobBuilder.build();SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, clazz.getCanonicalName());LiteJobConfiguration simpleRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build();return simpleRootConfig;
}@Bean(initMethod = "init")
public SpringJobScheduler fileCustomSchedule(FileCustomElasticJob fileCustomElasticJob, CoordinatorRegistryCenter coordinatorRegistryCenter){LiteJobConfiguration configuration = createLiteJob(fileCustomElasticJob.getClass(),"0/10 * * * * ?",4,"0=text,1=img,2=video,3=radio");return new SpringJobScheduler(fileCustomElasticJob,coordinatorRegistryCenter,configuration);
}

2) 修改作业任务

@Component
public class FileCustomElasticJob implements SimpleJob {@Autowiredprivate FileCustomServiceImpl fileCustomService;@Overridepublic void execute(ShardingContext shardingContext) {System.out.println("线程ID: " + Thread.currentThread().getId() + ";分片索引号:" + shardingContext.getShardingItem() + ";分片参数:" + shardingContext.getShardingParameter());dowWork(shardingContext.getShardingParameter());}private void dowWork(String shardingParameter) {QueryWrapper<FileCustom> query = new QueryWrapper<>();query.lambda().eq(FileCustom::getType,shardingParameter);List<FileCustom> fileCustomList = fileCustomService.list(query);for (FileCustom fileCustom : fileCustomList) {backWork(fileCustom);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}}private void backWork(FileCustom fileCustom) {System.out.println("开始备份>>>>>");System.out.println("备份ID:" + fileCustom.getId());System.out.println("备份方法名:" + fileCustom.getName());System.out.println("备份类型:" + fileCustom.getType());System.out.println("备份结束<<<<<");}
}

运行结果:

3 DataFlow任务调度

4 任务管理

 自动生成两张表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后&#xff0c;在SpringBoot的resources文件夹里的application.properties会添加以下代码&#xff1a; server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页&#xff0c;链接中使默认…

【kears】keras使用介绍

文章目录 一.特点二.keras如何支持TensorFlow、CNTK 和 Theano2.1 使用 TensorFlow 后端引擎训练和评估模型2.2 使用 TensorFlow 后端引擎训练和评估模型2.3 使用 Theano后端引擎训练和评估模型2.4 不同深度学习框架如何选择 三.使用步骤3.1 导入库3.2 构建模型3.3 编译模型3.4…

【经验】java时区问题

首先得有一个预备知识 时间戳&#xff1a;指1970-01-01 00:00:00(GMT/UTC)起到当前的毫秒数。与时区无关&#xff0c;不同时区同一个时刻的时间戳是相同的。所以&#xff0c;时间戳不受时区影响。但是&#xff0c;不同时区的国家同一个时间戳显示的日期不同&#xff0c;所以同一…

解锁区块链技术的潜力:实现智能合约与DApps

在数字时代&#xff0c;区块链技术正迅速成为重塑多个行业的革命性力量。从金融服务到供应链管理&#xff0c;再到数字身份验证&#xff0c;区块链提供了一种去中心化、安全和透明的数据处理方式。在本文中&#xff0c;我们将深入探讨区块链技术&#xff0c;特别是智能合约和去…

LDRA Testbed软件静态分析_常见问题及处理

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

水经微图IOS版5.2.0发布

随时随地&#xff0c;微图一下&#xff01; 水经微图&#xff08;简称“微图”&#xff09;IOS新版已上线。 在该版本中主要新增图层树节点排序功能、常规&#xff08;矩形、圆、椭圆、扇形&#xff09;绘制功能、地形夸张等主要功能。 当前版本 当前版本号为&#xff1a;5…

c++容器:string的模拟实现

文章目录 定义命名空间和类构造函数拷贝构造析构函数返回string的大小和容量operator[]operator迭代器beginendreservepush_backappendoperatorinserterase 定义命名空间和类 namespace shh {class string{private:char* _str nullptr;size_t _size 0;size_t _capacity 0;}…

鹏哥C语言复习——数据存储

目录 版本差异&#xff1a; 数据类型&#xff1a; 进制表示&#xff1a; 大小端储存&#xff1a; 数据运算&#xff1a; 浮点型在内存中的存储&#xff1a; 版本差异&#xff1a; debug和release的区别&#xff1a; 在栈区开辟地址一般是先从高地址开辟 debug创建数组和单…

代码随想录算法训练营33期 第三十六天 |435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 class Solution { public:static bool cmp(const vector<int>& a, const vector<int>& b){return a[0]<b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end()…

蓝桥集训之修理牛棚

蓝桥集训之修理牛棚 核心思想&#xff1a;贪心 先把所有牛棚合成一块木板然后将所有间隙大小求出 排序找到最大的n-1个总长度 - n-1个间隙 得到剩下n个木板总长度 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const i…

C#入门理解设计模式的6大原则

**设计模式的原则是指导设计模式创建和应用的基本原则&#xff0c;这些原则有助于创建灵活、可维护且可扩展的软件系统。**1. 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09; 单一职责原则指出一个类应该只有一个引起它变化的原因。换句话说&…

Project Euler_Problem 172_Few Repeated Digits_动态规划

原题目&#xff1a; 题目大意&#xff1a;18位数里头&#xff0c;有多少个数&#xff0c;对于每个数字0-9&#xff0c;在这18位里面出现均不超过3次 111222333444555666 布星~~ 112233445566778899 可以~~ 解题思路&#xff1a; 动态规划 代码: ll F[19][3000000];void …

Spring AOP IOC

spring的优缺点 IOC集中管理对象&#xff0c;对象之间解耦&#xff0c;方便维护对象AOP在不修改原代码的情况下&#xff0c;实现一些拦截提供众多辅助类&#xff0c;方便开发方便集成各种优秀框架 紧耦合和松耦合 松耦合可以使用单一职责原则、接口分离原则、依赖倒置原则 …

融资融券交易与普通的股票交易相比,有哪些优势和劣势?

融资融券交易与普通交易相比有着很大的不同: 1、资金要求不同。 投资者在进行普通证券交易时&#xff0c;必须有足额的资金才能买入证券&#xff0c;必须有足额的证券才能卖出。 而投资者进行融资融券交易&#xff0c;不需要持有足额的资金。当投资者预测证券的价格将要上涨&…

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统&#xff0c;采用XML名字空间风格核心模板&#xff1a;模板全部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大的便利&#xff0c;健壮的模板标签为站长DIY自己的网站提供了强有力…

无线通信:多址(Multiple Access)方式

什么是多址方式 多址方式又叫多址接入方式或多址技术&#xff0c;是指在一个网络&#xff08;如移动通信的小区、无线局域网&#xff09;中&#xff0c;当多个用户接入网络时&#xff0c;解决如何高效地共享一个无线资源&#xff08;时间/频率/空间/载波&#xff09;的技术。 …

springboot发送邮件

很久之前就想写一个总结的&#xff0c;一直没写&#xff0c;今天刚好又碰见了发送邮箱验证码的需求&#xff0c;刚好记录一波 一.核心依赖如下&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…

docker部署opensearch —— 筑梦之路

OpenSearch 简介 •OpenSearch 是一款开源的分布式搜索引擎(从 ElasticSearch 特定版本分叉而来)&#xff0c;可以执行快速、可扩展的全文搜索、应用程序和基础设施监控、安全和事件信息管理、运营健康跟踪等用例。 •OpenSearch 具有多种功能和插件&#xff0c;可以帮助索引、…

谷歌推出适用于安卓设备的“Find My Device”网络,功能类似苹果Find My

谷歌今日推出了适用于安卓设备的“Find My Device”网络&#xff0c;其功能类似于苹果的“Find My”网络&#xff0c;旨在帮助用户定位丢失、被盗的安卓产品。 安卓的“Find My Device”网络可以利用数以亿计运行 Android 9 或更高版本的安卓设备&#xff0c;通过蓝牙信号追踪丢…

自动化运维(二十五)Ansible 实战过滤器插件和缓存插件

Ansible 支持多种类型的插件&#xff0c;这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习 过滤器插件和缓存插件。 一、 过滤器插件&#xff08;Filter Plugins&#xff09; Ansible 过滤器插件&#xff08;Filter …