Spring Retry
1. Spring Retry 的工作原理
内部机制
Spring Retry 主要通过 AOP(面向切面编程)实现重试逻辑。以下是 Spring Retry 的内部工作流程:
- AOP 拦截器:当一个方法被标记为需要重试,并且该方法抛出了指定类型的异常时,Spring AOP 拦截器会拦截该调用。
- 异常捕获:如果该方法抛出指定类型的异常,AOP 拦截器会检查是否符合重试条件。
- 重试策略判断:根据配置的
RetryPolicy
和BackOffPolicy
,决定是否进行重试以及重试的时间间隔。 - 等待:根据
BackOffPolicy
等待一段时间。 - 重试:再次调用目标方法。
- 恢复逻辑:如果所有重试都失败,则执行
@Recover
注解定义的恢复逻辑。
RetryTemplate 的工作流程
RetryTemplate
是 Spring Retry 的核心类,它负责管理重试逻辑。以下是它的主要步骤:
- 初始化:根据配置初始化
RetryPolicy
和BackOffPolicy
。 - 方法调用:尝试调用目标方法。
- 异常捕获:如果方法抛出异常,检查是否符合重试条件。
- 等待:根据
BackOffPolicy
等待一段时间。 - 重试:再次调用目标方法。
- 恢复:如果所有重试都失败,执行
RecoveryCallback
。
2. 核心概念的深度解析
RetryPolicy
RetryPolicy
定义了重试策略,决定了在什么情况下应该重试。Spring 提供了几种内置的 RetryPolicy
实现,同时支持自定义实现。
-
SimpleRetryPolicy:基于尝试次数的简单策略。
SimpleRetryPolicy policy = new SimpleRetryPolicy(); policy.setMaxAttempts(5); // 设置最大重试次数为5次
-
TimeoutRetryPolicy:基于时间的策略,允许在指定时间内进行重试。
TimeoutRetryPolicy timeoutPolicy = new TimeoutRetryPolicy(); timeoutPolicy.setTimeout(5000L); // 设置超时时间为5秒
-
ExceptionClassifierRetryPolicy:根据异常类型决定是否重试。可以通过该策略为不同的异常设置不同的重试策略。
Map<Class<? extends Throwable>, Boolean> retryableExceptions = new HashMap<>(); retryableExceptions.put(IllegalArgumentException.class, true); retryableExceptions.put(NullPointerException.class, false);ExceptionClassifierRetryPolicy classifier = new ExceptionClassifierRetryPolicy(); classifier.setPolicyMap(retryableExceptions);
-
CompositeRetryPolicy:组合多个
RetryPolicy
,可以定义复杂的重试策略。
BackOffPolicy
BackOffPolicy
控制每次重试之间的等待时间。常见的策略包括:
-
FixedBackOffPolicy:固定延迟时间。
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy(); backOffPolicy.setBackOffPeriod(2000L); // 设置每次重试之间的延迟时间为2秒
-
ExponentialBackOffPolicy:指数增长的延迟时间。
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy(); exponentialBackOffPolicy.setInitialInterval(1000L); // 初始延迟时间1秒 exponentialBackOffPolicy.setMultiplier(2.0); // 每次重试延迟时间乘以2 exponentialBackOffPolicy.setMaxInterval(10000L); // 最大延迟时间10秒
-
NoBackOffPolicy:无延迟,立即重试。
-
UniformRandomBackOffPolicy:随机延迟时间,但有上下限。
RecoveryCallback
当所有重试都失败后执行的回调函数。用于处理最终失败的情况。
@Recover
public void recover(RuntimeException e) {System.out.println("All retries failed due to: " + e.getMessage());
}
3. 配置方式
注解方式
主配置类
首先,在主配置类中启用重试功能:
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.annotation.EnableRetry;@Configuration
@EnableRetry // 启用Spring Retry功能
public class AppConfig {
}
服务层实现
然后,在需要重试的方法上添加 @Retryable
注解,并且可以定义恢复逻辑:
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;@Service
public class MyService {/*** 使用@Retryable注解的方法,允许在遇到特定异常时进行重试。*/@Retryable(value = {RuntimeException.class}, // 当发生RuntimeException异常时进行重试maxAttempts = 4, // 设置最大重试次数为4次backoff = @Backoff(delay = 2000) // 设置每次重试之间的延迟时间为2秒)public void serviceMethod() throws Exception {System.out.println("Attempting to execute service method...");throw new RuntimeException("Service failure"); // 模拟服务失败}/*** 定义恢复逻辑,当所有重试都失败后执行。*/@Recover // 定义恢复逻辑,当所有重试都失败后执行public void recover(RuntimeException e) {System.out.println("All retries failed due to: " + e.getMessage());}
}
Java 配置类方式
通过 Java 配置类的方式可以手动配置重试模板和拦截器:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.support.RetryTemplate;@Configuration
public class RetryConfig {@Beanpublic RetryTemplate retryTemplate() {RetryTemplate retryTemplate = new RetryTemplate();SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();retryPolicy.setMaxAttempts(4); // 设置最大重试次数为4次retryTemplate.setRetryPolicy(retryPolicy);ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();backOffPolicy.setInitialInterval(2000L); // 初始延迟时间2秒retryTemplate.setBackOffPolicy(backOffPolicy);return retryTemplate;}
}
4. 高级用法
自定义 RetryPolicy 和 BackOffPolicy
你可以创建自定义的 RetryPolicy
和 BackOffPolicy
,以满足特定需求。例如,创建一个基于业务逻辑的重试策略:
import org.springframework.retry.RetryPolicy;
import org.springframework.retry.RetryContext;public class CustomRetryPolicy implements RetryPolicy {private int attempts = 0;private final int maxAttempts = 3;@Overridepublic boolean canRetry(RetryContext context) {attempts++;return attempts <= maxAttempts;}@Overridepublic void close(RetryContext context) {// 清理资源}@Overridepublic void registerThrowable(RetryContext context, Throwable throwable) {// 处理抛出的异常}
}
异常分类器
可以使用 ExceptionClassifierRetryPolicy
来根据不同的异常类型应用不同的重试策略:
import org.springframework.retry.policy.ExceptionClassifierRetryPolicy;
import org.springframework.retry.policy.SimpleRetryPolicy;
import org.springframework.retry.policy.TimeoutRetryPolicy;@Bean
public RetryTemplate customRetryTemplate() {ExceptionClassifierRetryPolicy classifier = new ExceptionClassifierRetryPolicy();Map<Class<? extends Throwable>, RetryPolicy> policyMap = new HashMap<>();policyMap.put(IllegalArgumentException.class, new SimpleRetryPolicy(3));policyMap.put(NullPointerException.class, new TimeoutRetryPolicy());classifier.setPolicyMap(policyMap);RetryTemplate template = new RetryTemplate();template.setRetryPolicy(classifier);return template;
}
使用 RetryTemplate
手动控制重试
除了使用注解外,你还可以手动使用 RetryTemplate
来控制重试逻辑:
@Autowired
private RetryTemplate retryTemplate;public void performOperation() {retryTemplate.execute(context -> {try {// 执行业务逻辑return null;} catch (Exception e) {throw new RuntimeException(e);}});
}
5. 常见问题及解决方案
1. 重试不生效
确保已经正确启用了 @EnableRetry
注解,并且你的方法上有 @Retryable
注解。同时检查异常类型是否匹配。
2. 事务回滚问题
如果你在重试过程中使用了事务,确保事务能够正确回滚。可以使用 @Transactional
注解来管理事务。
import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Transactional@Retryable(value = {RuntimeException.class},maxAttempts = 4,backoff = @Backoff(delay = 2000))public void serviceMethod() throws Exception {// 业务逻辑}
}
3. 性能瓶颈
过多的重试可能导致性能瓶颈。确保只在必要的情况下使用重试,并合理设置重试次数和延迟时间。
示例代码详解
示例1:结合 Spring Boot 和 Spring Retry
以下是一个完整的 Spring Boot 应用示例,展示了如何结合 Spring Retry 来处理临时性故障:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;@SpringBootApplication
@EnableRetry // 启用Spring Retry功能
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}@Service
public class MyService {@Retryable(value = {RuntimeException.class},maxAttempts = 4,backoff = @Backoff(delay = 2000))public void serviceMethod() throws Exception {System.out.println("Attempting to execute service method...");throw new RuntimeException("Service failure");}@Recoverpublic void recover(RuntimeException e) {System.out.println("All retries failed due to: " + e.getMessage());}
}
示例2:自定义重试策略
以下是一个自定义重试策略的示例:
import org.springframework.retry.RetryPolicy;
import org.springframework.retry.RetryContext;public class CustomRetryPolicy implements RetryPolicy {private int attempts = 0;private final int maxAttempts = 3;@Overridepublic boolean canRetry(RetryContext context) {attempts++;return attempts <= maxAttempts;}@Overridepublic void close(RetryContext context) {// 清理资源}@Overridepublic void registerThrowable(RetryContext context, Throwable throwable) {// 处理抛出的异常}
}
6. 最佳实践与注意事项
选择合适的异常类型
只对那些预期可能会暂时失败的操作进行重试,例如网络请求失败、远程服务不可用等情况。避免对非幂等操作进行重试,以免产生副作用。
设置合理的最大尝试次数和延迟
- maxAttempts:设定最大尝试次数,避免无限重试导致系统资源耗尽。
- delay:设定重试间隔时间,防止过快重试对系统造成额外压力。
事务管理
如果操作涉及到数据库事务,需注意重试机制如何与事务交互。通常,Spring Retry 不会自动回滚事务,因此你可能需要手动处理事务回滚。
幂等性
确保重试的方法是幂等的,即多次执行同样的操作不会产生副作用或错误结果。这对于涉及数据修改的操作尤为重要。
异常传播
如果所有重试都失败了,最后一个异常会被传播给调用者。可以通过 @Recover
注解定义恢复逻辑。
性能考虑
考虑到重试机制带来的性能开销,确保只在必要的地方使用重试,并合理配置重试策略。
日志记录
在重试逻辑中加入适当的日志记录,有助于调试和监控系统的运行状态。
相关文章:
Spring Retry
1. Spring Retry 的工作原理 内部机制 Spring Retry 主要通过 AOP(面向切面编程)实现重试逻辑。以下是 Spring Retry 的内部工作流程: AOP 拦截器:当一个方法被标记为需要重试,并且该方法抛出了指定类型的异常时&am…...
16.使用读写包操作Excel文件:XlsxWriter 包
一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…...
【最新版】智慧小区物业管理小程序源码+uniapp全开源
一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...
音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)
由于本文篇幅较长,分为上、下两篇。 一、引言 通过FFmpeg命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息: ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 而由《音视频入门…...
基于SpringBoot+Vue的驾校预约管理系统+LW示例参考
1.项目介绍 系统角色:管理员、普通用户、教练功能模块:用户管理、管理员管理、教练管理、教练预约管理、车辆管理、车辆预约管理、论坛管理、基础数据管理等技术选型:SpringBoot,Vue等测试环境:idea2024,j…...
基于k3s部署Nginx、MySQL、PHP和Redis的详细教程
先决条件 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS基础命令行操作能力确保服务器有至少2GB内存和10GB磁盘空间 1. 安装k3s(极简Kubernetes) 1.1 一键安装 # 用root用户或sudo权限执行以下命令 curl -sfL h…...
21.多态
一、多态概念 多种形态。 静态多态:编译时多态。(函数重载) 动态多态:运行时多态。(继承关系下,调用父类指针或引用,对于不同的对象有不同的行为) 二、多态的定义及实现 1ÿ…...
无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战
一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏: 流量入口层:用户访问域名解析至高防CNAME节点(如ai-protect.example.com)智能调度层:基于AI模型动态分配清洗节点,实时更新节点IP池回…...
新版AndroidStudio / IDEA上传项目到Gitee
目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…...
学习threejs,使用MeshFaceMaterial面材质容器
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshFaceMaterial 二…...
python微分方程求解,分别用显式欧拉方法、梯形法、改进欧拉方法、二阶龙格库塔方法、四阶龙格库塔方法求解微分方程
微分方程在自然科学、工程技术、社会科学等多个领域都有着广泛而重要的应用。而求解微分方程是数学与应用数据领域一大难题,对于一些复杂的微分方程无法通过计算推导计算其精确的方程表达式与 结果,因此,我们通过数学理论。迭代,微…...
【ubuntu】——wsl中使用windows中的adb
一、引言 在 Windows Subsystem for Linux(WSL)环境下工作时,有时需要使用 Android Debug Bridge(ADB)工具与 Android 设备进行交互。通过特定设置,能够在 WSL 中便捷地调用 Windows 系统中已安装的 ADB&a…...
Git 常用命令完全指南:从入门到高效协作
文章需要结构清晰,涵盖从入门到进阶的常用命令,结合实例和注意事项,帮助用户快速掌握Git的核心功能,并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库(SSH方…...
学习单片机需要多长时间才能进行简单的项目开发?
之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…...
面试系列|蚂蚁金服技术面【3】
今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获得心仪的 offer ! 第二轮面试之…...
Spring Boot项目中成功集成了JWT
JWT 原理解释 什么是 JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。JWT通常用于身份验证和信息交换。 JWT 的结构 JWT由三部分组成ÿ…...
《Java SQL 操作指南:深入理解 Statement 用法与优化》
在 Java 数据库编程中,Statement 是用于执行 SQL 语句的接口,允许程序与数据库进行交互。本文将详细介绍 Statement 的基本概念、常见用法以及 PreparedStatement 和 CallableStatement 等相关接口。 1. Statement 基本介绍 Statement 接口继承了 AutoC…...
element ui设置结束时间为23:59:59
开始时间为00:00:00结束时间为23:59:59 在请求接口前,用substring取结束时间的年月日,并替换时间值即可 <el-formref"searchForm":model"searchForm":inline"true"size"mini"keyup.enter.native"getDa…...
Matlab 舰载机自动着舰控制系统研究
1、内容简介 Matlab 188-舰载机自动着舰控制系统研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏地址:YOLO11入门 + 改进涨点——点击即可跳转 欢迎订阅 目录 json2txt脚本 xml2txt txt2json...
MySQL 横向衍生表(Lateral Derived Tables)
前面我们介绍过MySQL中的衍生表(From子句中的子查询)和它的局限性,MySQL8.0.14引入了横向衍生表,可以在子查询中引用前面出现的表,即根据外部查询的每一行动态生成数据,这个特性在衍生表非常大而最终结果集…...
基于llama.cpp的QwQ32B模型推理
基于llama.cpp的QwQ32B模型推理 llama.cpp项目主页: https://github.com/ggml-org/llama.cpp# llama.cpp源码下载 cd /root/lanyun-tmpgit clone https://github.com/ggml-org/llama.cpp#llama.cpp编译 llama.cpp是个C语言项目,实际调用过程需要先构建项…...
【Jmeter】使用教程
下载及安装 参考链接: JMeter下载及安装(附插件及中文包超详细) 参考链接: 【Jmeter】win 10 / win 11:Jmeter 下载、安装、汉化、新机迁移、版本更新(Jmeter 4 以上版本均适用) 分辨率的调整 参考链接: Jmeter5.3字…...
黑马商城完成随笔
完结撒花 🎉 🎉 🎉 差不多用了两三个星期?终于是完成了。 黑马商城体量应该是全部黑马项目中体量最多,技术栈最复杂的了。 可是仍然存在之前黑马项目的问题:不细致,不完整 很多技术栈的使用仅…...
【Python 算法零基础 1.线性枚举】
我装作漠视一切,以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm),其中 n是线性表的长度。m 是每次操作的量级,对于求最大值和求和来说,因为操作比较简单,所以 …...
涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额
01端口设置 使用以下命令可以可以查看到到ports的子选项 [rootk8s-master01 ~]# kubectl explain pod.spec.containers.portsKIND: PodVERSION: v1RESOURCE: ports <[]Object>FIELDS:name <string> # 端口名称,如果指定,必须保证name在pod…...
七大常用智能家居协议对比
如果您不知道在项目中使用哪种智能家居通信协议,那么进入智能家居行业可能会很困难。如果没有合适的协议将其集成到智能家居生态系统中,智能家居设备将无法正常工作。否则,您将面临硬件和软件无法满足最终用户期望的风险。协议选择不当可能会…...
K8S快速部署
前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...
TCP 三次握手四次挥手过程详解
注:本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文,机翻未校。 中文引文,未整理去重。 英文引文第二篇,实为国内《稀土掘金技术社区》文章,没检索到原文,此处 “出口转内销” 。 如有内…...
如何利用 Zeabur 实现 OceanBase 的一键部署
引言 Zeabur 是一个功能强大且即开即用的自动化部署平台,它不仅能迅速部署多种应用,还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户,如 AFFiNE、Bytebase 等企业客户,以及大量全栈和独立开发者。将…...
基于Springboot+服务器磁盘的本地文件存储方案
[local-file-system]基于服务器磁盘的本地文件存储方案 仅提供后端方案 github 环境 JDK11linux/windows/mac 应用场景 适用于ToB业务,中小企业的单体服务,仅使用磁盘存储文件的解决方案 仅使用服务器磁盘存储 与业务实体相结合的文件存储方案&…...
基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等
板卡简介: 本板为模拟量高速采样板(ADI),主要用于电机转速和相电流检测,以实现电机闭环控制。 性能规格: 电源:DC5V,DC3.3V,DC15V,DC24V FPGA:…...
泰勒·斯威夫特(Taylor Swift)的音乐影响力与商业版图深度研究
泰勒斯威夫特的音乐影响力与商业版图深度研究 简介 泰勒斯威夫特(Taylor Swift)是当今流行音乐领域最具影响力的全球巨星之一。自少年时期出道以来,她在音乐风格、形象和商业战略上不断演变,从乡村音乐新人成长为引领流行文化的…...
神经网络微调技术解析
神经网络微调技术 微调(Fine-tuning)是迁移学习的核心技术,通过在预训练模型基础上调整参数,使其适应特定任务或领域。以下从传统方法、参数高效微调(PEFT)、新兴技术三个维度展开,覆盖主流技术…...
鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用
1、前期准备 简单封装一个用户首选项的工具类 import { preferences } from "kit.ArkData";// 用户首选项方法封装 export class Preferences {private myPreferences: preferences.Preferences | null null;// 初始化init(context: Context, options: preference…...
国科大——计网(0812)——考试真题
前沿: 此篇文章记录了国科大秋季学期计网(0812)课程的一些考试真题,某些题目的答案仅供参考,还请自行辨别。 备注: 计网的考试题一般都会多一道,每道题的分值相同,例如:…...
Feedback-Guided Autonomous Driving
Feedback-Guided Autonomous Driving idea 问题设定:基于 CARLA 的目标驱动导航任务,通过知识蒸馏,利用特权智能体的丰富监督信息训练学生传感器运动策略函数 基于 LLM 的端到端驱动模型:采用 LLaVA 架构并添加航点预测头&#…...
超参数优化算法:scikit-opt库、Scikit-Optimize库
1 scikit-opt库:https://www.cnblogs.com/luohenyueji/p/18333387 https://blog.csdn.net/weixin_45750972/article/details/124683402 a 差分进化算法 (Differential Evolution):一种基于群体搜索的优化算法,通过模拟生物进化的过程来寻找最…...
我与DeepSeek读《大型网站技术架构》- 大型网站架构技术一览与Web开发技术发展历程
文章目录 大型网站架构技术一览1. 前端架构2. 应用层架构3. 服务层架构4. 存储层架构5. 后台架构6. 数据采集与监控7. 安全架构8. 数据中心机房架构 Web开发技术发展历程一、静态HTML阶段二、CGI脚本模式阶段三、服务器页面模式阶段 大型网站架构技术一览 1. 前端架构 浏览器…...
解决QT_Debug 调试信息不输出问题
方式1 :手动通过添加环境变量解决 ->使用命令: QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…...
NebulaGraph3.3.0部署与配置
系统参数 8g 2核参考文档: https://docs.nebula-graph.com.cn/3.8.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/静态IP配置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容…...
oracle 基础知识之 多表查询
多表查询定义:当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段,一次查询出多个表的数据。多表查询包括了等值连接、左连接、右连接、完全连接。 1.等值连接 等值连接也称为简单连接…...
《论分布式系统架构设计及其应用》架构师论文
【摘要】 2022年3月,我参与了某金融科技公司“智能风控云平台”项目的研发工作,担任系统架构师职务,负责分布式系统架构设计与核心技术选型。该平台旨在为银行、保险等金融机构提供实时风险评估、反欺诈及数据服务,需支撑每秒十万…...
Matlab 汽车主动悬架LQR控制器设计与仿真
1、内容简介 Matlab 182-汽车主动悬架LQR控制器设计与仿真 可以交流、咨询、答疑 2、内容说明 略 1、研究背景 汽车悬架系统由弹性元件、导向元件和减振器组成,是车身与车轴之间连接的所有组合体零件的总称,也是车架(或承载式车身)与车桥(或车轮)之间一切力传递装置的总称,…...
JMeter 参数化工作原理说明
一、核心目标:让每条请求都能用不同数据 参数化的本质是让 JMeter 在发送请求时,自动替换变量为不同的值。例如: 模拟 100 个用户登录 → 每个用户使用不同的账号密码。模拟搜索不同关键词 → 每次请求自动更换关键词。 二、参数化如何工作…...
[免费]直接整篇翻译pdf工具-支持多种语言
<闲来没事写篇博客填补中文知识库漏洞> 如题,[免费][本地]工具基于开源仓库: 工具 是python!太好了,所以各个平台都可以,我这里基于windows. 1. 先把github代码下载下来: git clone https://githu…...
Python 鼠标轨迹算法 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
Unity音乐内存优化
文章目录 音乐下载远程音乐 音乐 音乐文件如果只从工程目录里面读取,那有很多种方法可以优化,比如设置Load Type直接采用流式加载方式,内存直接降最小(但是记住,每种优化都是有对应的代价的,优化是一种平衡…...
hubilder打包ios app, 并上传TestFlight
目录 一 前提条件 不是该项目成员解决 1. 直接找到该项目的管理人员去设置你的账号 2. 直接重新生成APPID(一般不建议的,可以查看) 3. 如果是离职人员,可以让他将项目权限转让出来 - 如何转让应用 - DCloud问答 未申请ios证书和描述文件 APP ID 的…...
3个 Vue $set 的应用场景
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! 在 Vue2 中,由于 Object.defineProperty 的限制&#…...