如何保证某个程序系统内只运行一个,保证原子性

	@GetMapping("/startETL")
//	@Idempotent(expireTime = 90, info = "请勿90秒内连续点击")public R getGaugeTestData6() {log.info("start ETL");//redis设置t_data_load_record 值为2bladeRedis.set("t_data_load_record_type", 2);String s = atomicityService.startETL();return R.data(s);}
@Slf4j
@Service
public class AtomicityService {@Autowiredprivate DataSourceService dataSourceService;// 使用 AtomicBoolean 作为互斥标志private final AtomicBoolean isExecuting = new AtomicBoolean(false);private final AtomicBoolean isExecutingForXRRJ = new AtomicBoolean(false);public String startETL() {if (isExecuting.compareAndSet(false, true)) {try {long startTime = System.currentTimeMillis(); // 记录开始时间ETLExecutionThreadLocal.setStartTime(startTime);// 执行 ETL 任务的具体逻辑//查询已经存在的数据的 批次号和站点号 做排除用List batchSiteList = dataSourceService.ReadBatchSiteList();List<Long> batchList = dataSourceService.ReadBatchList();List<Long> testerList = null;//测试人还是全删除吧,不要做增量查询,否则有些人被更新过信息进不来//读取数据源dataSourceService.ReadDataSource(batchSiteList, batchList, testerList);long endTime = System.currentTimeMillis();long executionTimeSeconds = (endTime - startTime) / 1000; // 计算用时(秒)return "ETL执行成功,用时:" + executionTimeSeconds + "秒";} finally {isExecuting.set(false);}} else {// 如果定时任务执行期间有手动执行请求,则驳回log.info("任务已经在执行中,本次请求被驳回");return "任务已经在执行中,本次请求被驳回";}}

定时任务在此与其共用一个程序,两者不可同时执行

package org.springblade.etl.source.task;import lombok.extern.slf4j.Slf4j;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springblade.etl.source.service.AtomicityService;
import org.springblade.etl.source.service.DataSourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.List;
import java.util.Map;@Component
@Slf4j
public class ETLJob {// 注入 dataSourceService@Resourceprivate AtomicityService atomicityService;@Resourceprivate BladeRedis bladeRedis;@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行一次public void executeETL() {// 执行 startETL 方法log.info("Scheduled ETL job started");bladeRedis.set("t_data_load_record_type", 1);R result = getGaugeTestData6();log.info("ETL job finished with result: " + result);}// 在此处定义 getGaugeTestData6 方法的具体实现public R getGaugeTestData6() {log.info("start for Scheduled ETL job");atomicityService.startETL();return R.data("success for Scheduled ETL job");}//	@Scheduled(cron = "0/1 * * * * ?") // 每秒执行一次
//	public void executeTestJob() {
//		log.info("定时任务执行测试");
//	}
}

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

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

相关文章

13-Java代理模式 ( Proxy Pattern )

Java代理模式 摘要实现范例 代理模式&#xff08;Proxy Pattern&#xff09;使用一个类代表另一个类的功能 代理模式创建具有现有对象的对象&#xff0c;以便向外界提供功能接口 代理模式属于结构型模式 摘要 1. 意图 为其他对象提供一种代理以控制对这个对象的访问2. 主…

力扣206反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1&#xff0c;双指针 2&#xff0c;递归。递归参考双指针更容易写&#xff0c; 为什么不用头插…

如何开通 chatGPT4 会员

如何开通 chatGPT4 会员 你是否对最新的人工智能技术充满好奇&#xff1f;想要体验OpenAI的最新成果&#xff0c;ChatGPT-4&#xff1f;现在&#xff0c;通过https://bewildcard.com/i/XUE16 这个链接注册WildCard&#xff0c;你可以轻松实现这一切&#xff01; 详细教程Wild…

3.1_2024ctf青少年比赛部分web题

php后门 根据x-powered-by知道php的版本 该版本存在漏洞&#xff1a; PHP 8.1.0-dev 开发版本后门 根据报错信息&#xff0c;进行提示&#xff0c;前 GET / HTTP/1.1 Host: challenge.qsnctf.com:31639 User-Agentt:12345678system(cat /flag);var_dump(2*3);zerodium12345678…

【小白学机器学习6】真实值,观测值,拟合值,以及数据的误差的评价:集中趋势,离散度,形状等

目录 1 世界上有哪几种值&#xff1f;只有3种值 1.1 真值/真实值/理想值/主观值&#xff08;形而上学世界里&#xff09; 1.2 实际值/现实值/观测值/样本值&#xff08;看到的/记录下来的&#xff09; 1.3 拟合值/预测值&#xff08;算出来的&#xff09; 2 对数据的各种…

C语言利用函数创建链表,修改链表(插入,删除,添加),指针函数的返回

这段代码是一个简单的链表操作程序&#xff0c;包括创建节点、在链表末尾添加节点、在指定位置插入节点和删除指定位置的节点。以下是详细的注释&#xff1a; #include<stdio.h> #include<stdlib.h>// 定义链表节点结构体 struct listnode{int i; // 节点存储的整…

TDengine 签约树根互联,应对“高基数”难题

近日&#xff0c;树根互联与涛思数据达成签约合作&#xff0c;共同推动智能制造领域的建设。作为一家处于高速发展期的工业互联网企业&#xff0c;树根互联将新一代信息技术与制造业深度融合&#xff0c;开发了以自主可控的工业互联网操作系统为核心的工业互联网平台——根云平…

【HTML】HTML标签实例学习笔记(待更新)-黑马程序员

【HTML】HTML标签实例学习笔记&#xff08;待更新&#xff09;-黑马程序员 成对出现的标签 标签一般都是成对出现&#xff0c;标签之间的关系有包含关系和并列关系两种。 像 <head></head>为双标签&#xff0c;<br/>为单标签 单标签很少 大多数都为双标签。…

springboot项目单纯使用nacos注册中心功能

Spring Boot 项目完全可以单独使用 Nacos 作为注册中心。Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它支持服务的注册与发现&#xff0c;能够与 Spring Boot 应用无缝集成&#xff0c;为微服务架构提供了强大的支持。 在使用 Nacos 作为注册中…

Python实现DMI工具判断信号:股票技术分析的工具系列(3)

Python实现DMI工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;3&#xff09; 介绍算法解释 代码rolling函数介绍完整代码 介绍 先看看官方介绍&#xff1a; DMI (趋向指标&#xff09; 用法 1.PDI线从下向上突破MDI线&#xff0c;显示有新多头进场&#xff0c;为…

系统架构29 - 架构风格补充(下)

面向服务架构风格 关键目标关键技术实现方式WEB Service服务注册表企业服务总线ESB特点&#xff1a; SOA是一种 粗粒度、松耦合服务架构&#xff0c;服务之间通过简单、精确定义接口进行通信&#xff0c;不涉及底层编程接口和通信模型。 在SOA中&#xff0c; 服务是一种为了满…

BUUCTF---[BJDCTF2020]藏藏藏1

1.题目描述 2.下载附件&#xff0c;解压之后是一张图片和一个文本 3.把图片放在winhex,发现图片里面包含压缩包 4.在kali中使用binwalk查看&#xff0c;然后使用foremost分离&#xff0c;在使用tree查看分离出来的文件&#xff0c;最后将zip文件使用unzip进行解压。步骤如下 5.…

pdf编辑软件哪个好用?5款PDF编辑器分享

pdf编辑软件哪个好用&#xff1f;PDF编辑软件在现代办公和学术研究中发挥着举足轻重的作用&#xff0c;它们不仅具备基础的编辑和修改功能&#xff0c;还能够支持多种注释工具&#xff0c;帮助我们高效地管理和整理PDF文件。无论是需要调整文档布局、添加文本或图像&#xff0c…

RocketMQ - 从RocketMQ全链路分析一下为什么用户支付后没收到红包?

1. 订单系统推送消息到MQ的过程会丢失消息吗? 订单系统在接收到订单支付成功的通知之后,必然会去推送一条订单支付成功的消息到MQ,那么在这个过程中,会出现丢失消息的问题吗? 答案是可能会丢失的,比如订单系统在推送消息到RocketMQ的过程中,是通过网络去进行传输的,但…

C++ 前缀和

目录 例1 例2 例3 例4 例5 例6 例7 例8 例1 DP34 【模板】前缀和 分析&#xff1a;dp和arr的大小并不是固定的&#xff0c;就是有没有偏移量&#xff0c;这里的n是从1开始&#xff0c;不如直接放到下标1处&#xff0c;在最后的减法时&#xff0c;如果用第一个参考代码会…

MySQL - #1115 - Unknown character set: ‘utf8mb4‘

问题描述 #1115 - Unknown character set: utf8mb4 原因分析 因为在创建表的时候是有这个编码的&#xff0c;但是在单独修改某个字段的编码时发现报错&#xff0c;虽然觉得莫名其妙&#xff0c;那就将机就计&#xff0c;改成大概率有的编码——UTF8&#xff0c;因为这边为的是…

rtt的io设备框架面向对象学习-touch设备

目录 1.触摸设备基类2.触摸设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 io设备管理层 4.总结5.使用5.1实例 1.触摸设备基类 此层处于设备驱动框架层。此层的类是抽象类。 在/ components / drivers / include / drivers /touch.h定义了如下touch设备…

云计算 3月2号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…

flink on yarn paimon

目录 概述实践paimon 结束 概述 ogg kafka paimon 实践 前置准备请看如下文章 文章链接hadoop一主三从安装链接spark on yarn链接flink的yarn-session环境链接 paimon 目标: 1.同步表2.能过 kafka 向 paimon写入 SET parallelism.default 2; set table.exec.sink.not-n…

Ai学社致力于Ai视觉设计和AI绘画

Ai学社来啦&#xff01;致力于短时间搞定Ai视觉设计、AI绘画。 遍知首席Ai讲师&#xff0c;教大家如何利用Ai迅速提升工作效率&#xff0c;升职加xin&#xff01;目前申请对ai感兴趣的均可以参加&#xff01;免费报名。 招生人数&#xff1a;本批次至少招募100名。招生时间&…