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

Java对接微信支付全过程详解

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述

在这里插入图片描述

Java对接微信支付全过程详解


引言

在数字化商业蓬勃发展的今天,移动支付已成为连接用户与服务的核心纽带。微信支付凭借其庞大的用户基数和成熟的生态体系,成为企业拓展线上业务不可或缺的支付工具。然而,对于Java开发者而言,如何高效、安全地对接微信支付接口,构建稳定可靠的支付系统,仍面临诸多技术挑战——从复杂的签名验签机制到异步通知的幂等性处理,从证书管理到高并发场景下的性能优化,每一步都需要精准的技术设计与严谨的代码实现。

本文将以系统性、实战性为导向,深入剖析Java对接微信支付的核心流程与关键技术。无论是Native支付、JSAPI支付还是小程序支付,其底层逻辑均围绕预支付订单生成、支付结果异步通知、订单状态主动查询三大核心环节展开。文章不仅提供清晰的代码示例(基于Spring Boot框架与微信支付V3 API),更聚焦于实际开发中的高频痛点:如何通过RSA签名保障通信安全?如何设计幂等回调接口避免重复扣款?如何利用微信平台证书防止伪造请求?这些问题将在文中逐一击破。

此外,本文还将探讨企业级支付系统中的最佳实践,例如使用WechatPay Apache HttpClient简化证书管理、通过分布式锁实现订单状态同步、结合日志监控提升系统可观测性等。无论您是初探支付领域的开发者,还是需优化现有支付架构的技术负责人,均可从中获得从基础配置到高阶优化的完整知识链路,助力构建高可用、高安全的支付服务体系,为业务增长筑牢技术基石。

一、准备工作

  1. 注册微信商户平台

    • 获取商户号(mchid)、API密钥(API_KEY)。
    • 下载API证书apiclient_cert.pemapiclient_key.pem)。
  2. 配置支付参数

    # application.properties
    wxpay.mch-id=你的商户号
    wxpay.api-key=你的API密钥
    wxpay.notify-url=https://你的域名/api/wxpay/notify
    

二、核心接口实现

1. 生成预支付订单(Native支付)

public class WxPayService {private String mchId;private String apiKey;private String notifyUrl;// 初始化参数(通过@Value注入或配置文件读取)/*** 生成Native支付二维码链接*/public String createNativeOrder(String orderId, int amount) throws Exception {String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";Map<String, Object> params = new HashMap<>();params.put("mchid", mchId);params.put("appid", "你的AppID");  // 如果是公众号/小程序支付params.put("description", "订单描述");params.put("out_trade_no", orderId);params.put("notify_url", notifyUrl);params.put("amount", Map.of("total", amount, "currency", "CNY"));// 生成签名并发送请求String body = JSON.toJSONString(params);String authorization = generateSignature("POST", url, body);// 使用OkHttp或RestTemplate发送请求String response = sendPostRequest(url, body, authorization);return JSON.parseObject(response).getString("code_url");}/*** 生成V3接口的Authorization头*/private String generateSignature(String method, String url, String body) {String timestamp = String.valueOf(System.currentTimeMillis() / 1000);String nonceStr = UUID.randomUUID().toString().replace("-", "");String message = method + "\n" + url + "\n" + timestamp + "\n" + nonceStr + "\n" + body + "\n";String signature = signWithSHA256RSA(message, apiKey);  // 使用私钥签名return "WECHATPAY2-SHA256-RSA2048 " + "mchid=\"" + mchId + "\","+ "nonce_str=\"" + nonceStr + "\","+ "timestamp=\"" + timestamp + "\","+ "serial_no=\"你的证书序列号\","+ "signature=\"" + signature + "\"";}
}

2. 处理微信支付回调(关键!)

@RestController
@RequestMapping("/api/wxpay")
public class WxPayCallbackController {@PostMapping("/notify")public String handleNotify(@RequestBody String requestBody,@RequestHeader("Wechatpay-Signature") String signature,@RequestHeader("Wechatpay-Timestamp") String timestamp,@RequestHeader("Wechatpay-Nonce") String nonce) {// 1. 验证签名(防止伪造请求)String message = timestamp + "\n" + nonce + "\n" + requestBody + "\n";boolean isValid = verifySignature(message, signature, publicKey); // 使用微信平台公钥验证if (!isValid) {return "<xml><return_code>FAIL</return_code></xml>";}// 2. 解析回调数据Map<String, String> result = parseXml(requestBody);String orderId = result.get("out_trade_no");String transactionId = result.get("transaction_id");// 3. 幂等性处理:检查订单是否已处理if (orderService.isOrderPaid(orderId)) {return "<xml><return_code>SUCCESS</return_code></xml>";}// 4. 更新订单状态orderService.updateOrderToPaid(orderId, transactionId);// 5. 返回成功响应(必须!否则微信会重试)return "<xml><return_code>SUCCESS</return_code></xml>";}
}

3. 查询订单状态

public class WxPayService {public Map<String, String> queryOrder(String orderId) throws Exception {String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/" + orderId + "?mchid=" + mchId;String authorization = generateSignature("GET", url, "");String response = sendGetRequest(url, authorization);return JSON.parseObject(response, Map.class);}
}

三、关键注意事项

  1. 签名验证

    • 所有回调必须验证签名,防止伪造请求。
    • 使用微信提供的平台证书验证。
  2. 幂等性设计

    • 通过数据库唯一索引或Redis锁防止重复处理订单。
  3. 证书管理

    • 推荐使用WechatPay Apache HttpClient简化证书处理:
      <dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.7</version>
      </dependency>
      
  4. 日志记录

    • 记录所有微信请求和回调,方便排查问题。

四、完整调用示例(Spring Boot)

@RestController
public class PaymentController {@Autowiredprivate WxPayService wxPayService;@GetMapping("/createOrder")public String createOrder(@RequestParam String orderId, @RequestParam int amount) {try {String codeUrl = wxPayService.createNativeOrder(orderId, amount);return "<img src=\"https://example.com/qr?data=" + codeUrl + "\">";} catch (Exception e) {return "支付创建失败: " + e.getMessage();}}
}

五、常见问题解决

  • 证书加载失败:检查证书路径和格式(必须为PEM格式)。
  • 签名错误:使用微信官方验签工具调试。
  • 回调未触发:检查notify_url是否外网可访问,且返回SUCCESS

通过以上步骤,可完成微信支付的核心对接,确保支付流程的可靠性和安全性。

相关文章:

Java对接微信支付全过程详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

微软 System Center Configuration Manager(SCCM)的组件文件

微软 System Center Configuration Manager(SCCM) 或 Microsoft Endpoint Configuration Manager(MECM) 的组件文件,属于企业级设备管理工具的一部分。以下是具体说明: C:\Windows\CCM\smsswd.exe C:\Windows\CCM\tsmanager.exe smsswd.exe 和 tsmanager.exe 是 Micros…...

C语言和C++到底有什么关系?

C 读作“C 加加”&#xff0c;是“C Plus Plus”的简称。 顾名思义&#xff0c;C 就是在 C 语言的基础上增加了新特性&#xff0c;玩出了新花样&#xff0c;所以才说“Plus”&#xff0c;就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…...

10.PE导出表

一:定位导出表 PIMAGE_NT_HEADERS->OptionalHeader->DataDirectory[0] typedef struct _IMAGE_DATA_DIRECTORY {DWORD VirtualAddress; // 导出表的RVADWORD Size; // 导出表大小(没用) } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; 该结构的Vi…...

springBoot中不添加依赖 , 手动生成一个token ,并校验token,在统一拦截器中进行校验 (使用简单 , 但是安全性会低一点)

要在 Spring Boot 里实现接口统一拦截并校验 Token&#xff0c;可以借助 Spring 的拦截器机制。下面是具体的实现步骤和代码示例。 1. 创建 Token 工具类 import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgori…...

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款轻量级且功能强大的跨平台代码编辑器&#xff0c;凭借丰富的插件生态和高度的可定制性&#xff0c;深受开发者喜爱。对于 C/C 开发者而言&#xff0c;在 VSCode 中搭建开发环境&#xff0c;能够获得灵活…...

ES6(4) Map 集合详解

1. Map 集合简介 Map 是 ES6 提供的一种新的键值对数据结构&#xff0c;与普通对象&#xff08;Object&#xff09;不同&#xff0c;Map 的键可以是任意类型&#xff08;包括对象、函数等&#xff09;。 2. 创建 Map 集合 可以使用 new Map() 创建一个 Map&#xff0c;并在括…...

DeepSeek私有化部署与安装浏览器插件内网穿透远程访问实战

文章目录 前言1. 本地部署OllamaDeepSeek2. Page Assist浏览器插件安装与配置3. 简单使用演示4. 远程调用大模型5. 安装内网穿透6. 配置固定公网地址 前言 最近&#xff0c;国产AI大模型Deepseek成了网红爆款&#xff0c;大家纷纷想体验它的魅力。但随着热度的攀升&#xff0c…...

【设计模式】建造者模式

三、建造者模式 3.3 建造者模式 建造者(Builder) 模式也称构建器模式、构建者模式或生成器模式&#xff0c;同工厂模式或原型 模式一样&#xff0c;也是一种创建型模式。建造者模式比较复杂&#xff0c;不太常用&#xff0c;但这并不表示不需要了 解和掌握该模式。建造者模式…...

一场由 ES 分片 routing 引发的问题

一场由 ES 分片 routing 引发的问题 ES 结构 {"poroperties": {"joinType": {"type": "join","eager_global_ordinals": true,"relations": {"spu": "sku"}},"id":{"type&q…...

搭建Python量化开发环境:从零开始的完整指南

搭建Python量化开发环境&#xff1a;从零开始的完整指南 在量化投资领域&#xff0c;一个稳定且高效的开发环境是成功的关键。本文将引导你一步步搭建起自己的Python量化开发环境&#xff0c;确保你能够顺利开始编写和运行量化策略。 &#x1f680;量化软件开通 &#x1f68…...

JavaScript日期区间计算:精准解析年月日差异

一、应用场景与功能概述 在日常的制作项目或者是练习&#xff0c;我们经常需要计算两个日期之间的精确时间差。本文将通过一个JavaScript日期计算函数&#xff0c;详细解析如何实现精准的年/月/日差异计算&#xff0c;并探讨实际开发中的常见问题和解决方案。 二、核心功能解…...

大数据学习(71)-三范式构成

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

el-table 插槽踩过的坑 :slot-scope 和#default的区别

slot-scope和#default是Vue中用于定义插槽的两种不同语法&#xff0c;它们在Vue 2和Vue 3中有不同的应用场景和语法规则。‌ slot-scope 在‌Vue 2.x‌中&#xff0c;slot-scope是用于声明具名插槽并获取父组件传递过来的数据的主要方式。通过slot-scope可以定义一个变量scop…...

Linux一键安装node.js【脚本】

node.js一般不用系统的apt安装&#xff0c;而是用nvm这个前端的应用商店安装 node.js是js环境&#xff0c;nvm是安装nodejs管理器。npm是nodejs里的包管理器&#xff0c;安装模块的&#xff0c;类似于python的pip 把以下代码复制保存在一个文件里 比如nano install_nodejs.sh …...

vue3:pinia安装及其使用

​一、安装 Pinia 的步骤 ​1、安装 Pinia npm install pinia 2、​在 Vue 应用中引入 Pinia 在 main.js 中引入并注册 Pinia&#xff1a; import { createApp } from vue; import { createPinia } from pinia; import App from ./App.vue;const app createApp(App); app…...

vue2升级Vue3--native、对inheritAttrs作用做以解释、声明的prop属性和未声明prop的属性

native取消 在 Vue 3 中&#xff0c;v-on 的 .native 修饰符已经被移除。在 Vue 2 中&#xff0c;.native 修饰符用于在组件的根元素上监听原生 DOM 事件&#xff0c;但在 Vue 3 中&#xff0c;这一行为发生了变化。 在 Vue 3 中&#xff0c;所有未在子组件的 emits 选项中定…...

【漫话机器学习系列】146.Softmax 激活函数(Softmax Activation Function)

Softmax 激活函数详解 1. Softmax 函数概述 Softmax 函数&#xff08;Softmax Activation Function&#xff09;是一种常用于多分类任务的激活函数&#xff0c;广泛应用于机器学习和深度学习模型&#xff0c;特别是在神经网络的输出层。它的主要作用是将输入的多个实数值转换…...

解决:ModuleNotFoundError: No module named ‘_sqlite3‘

报错&#xff1a; from _sqlite3 import * ModuleNotFoundError: No module named _sqlite3安装sqlite3支持组件: sudo apt-get install libsqlite3-dev进入之前下载的python包下&#xff0c;重新编译和安装Python ./configure --enable-loadable-sqlite-extensions make &a…...

C++差分风暴:区间修改终极模板

目录 &#x1f525; 差分核心价值 &#x1f31f; 一维差分模板 1. 核心思想 2. 代码实现 3. 动态图示 &#x1f4e6; 二维差分模板 1. 核心公式 2. 代码实现 3. 二维修改示意图 &#x1f6a8; 六大避坑指南 &#x1f4a1; 复杂度对比 &#x1f308; LeetCode实战 &…...

easypoi导入Excel兼容日期和字符串格式的日期和时间

问题场景 在使用easypoi导入Excel时&#xff0c;涉及到的常用日期会有yyyy-MM-dd HH:mm:ss、yyyy-MM-dd和HH:mm:ss&#xff0c;但是Excel上面的格式可不止这些&#xff0c;用户总会输入一些其他格式&#xff0c;如 如果在定义verify时用下面这种格式定义&#xff0c;那么总会…...

《保险科技》

自己在保险行业工作很多年&#xff0c;只是接触了一些数据的内容&#xff0c;对于保险业务的知识了解的很少&#xff0c;想通过这本书补充一下&#xff0c;但是发现这本书就是一些知识的拼接。 先将保险的历史&#xff0c;后讲保险的定义&#xff0c;然后就是吹嘘保险行业和互联…...

QT编程之HTTP服务端与客户端技术

一、HTTP 服务器实现方案 ‌QtWebApp 集成‌ 将QtWebApp源码的 httpserver 目录导入项目&#xff0c;并在 .pro 文件中添加 include ($$PWD/httpserver/httpserver.pri)‌。配置 WebApp.ini 文件定义服务参数&#xff08;IP、端口、线程池等&#xff09;&#xff0c;通过 HttpL…...

每日一题--计算机网络

一、基础概念类问题 1. TCP 和 UDP 的区别是什么&#xff1f; 回答示例&#xff1a; TCP&#xff1a;面向连接、可靠传输&#xff08;通过三次握手建立连接&#xff0c;丢包重传&#xff09;、保证数据顺序&#xff08;如文件传输、网页访问&#xff09;。 UDP&#xff1a;无…...

IIS 服务器日志和性能监控

Internet Information Services &#xff08;IIS&#xff09; 是 Microsoft 提供的一款功能强大、灵活且可扩展的 Web 服务器&#xff0c;用于托管网站、服务和应用程序。IIS 支持 HTTP、HTTPS、FTP、SMTP 和更多用于提供网页的协议&#xff0c;因此广泛用于企业环境。 IIS 的…...

Unity学习之Shader总结(一)

一、Lesson1 1、渲染流水线 &#xff08;1&#xff09;应用阶段 模型->模型处理&#xff08;应用阶段&#xff09;–>输入结构 应用阶段主要操作&#xff1a;粗粒度剔除、进行渲染设置、准备基本数据、输出到几何阶段 &#xff08;2&#xff09;几何阶段 输入结构-&…...

java,poi,提取ppt文件中的文字内容

注意&#xff0c;不涉及图片处理。 先上pom依赖&#xff1a; <!-- 处理PPTX文件 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><!--…...

matlab R2024b下载教程及安装教程(附安装包)

文章目录 前言一、matlab R2024b 安装包下载二、matlab R2024b安装教程 前言 为帮助大家顺利安装该版本软件&#xff0c;特准备matlab R2024b下载教程及安装教程&#xff0c;它将以简洁明了的步骤&#xff0c;指导你轻松完成安装&#xff0c;开启 MATLAB R2024 的强大功能之旅…...

设计模式之外观模式:原理、实现与应用

引言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过提供一个统一的接口来简化复杂系统的使用。外观模式隐藏了系统的复杂性&#xff0c;使得客户端可以通过一个简单的接口与系统交互。本文将深入探讨外观模式的原理、实现方式以及实…...

移远QuecPython模组中的看门狗技术:如何提升设备可靠性

概述 对蜂窝通信模组而言&#xff0c;看门狗&#xff08;Watchdog&#xff09;是一种硬件或软件的监控机制&#xff0c;用于监测模组的运行状态。当模组因为外界干扰或程序错误陷入死循环时&#xff0c;看门狗会自动触发模组重启&#xff0c;从而恢复模组的运行状态。 对看门…...

汽车感性负载-智能高边钳位能量计算

随着汽车电子技术的发展&#xff0c;新的电子电气架构下&#xff0c;越来越多的执行部件在车身出现&#xff0c;比如电磁阀、风机、水泵、油泵、雨刮继电器等常用的执行器&#xff0c; 它们一般都表现为感性特点。驱动这些负载的最简单和最常见的方法是将它们连接到高边侧开关(…...

Kubernetes之ETCD

ETCD 是 Kubernetes 的核心组件之一&#xff0c;它是一个分布式键值对存储数据库&#xff0c;专为高可用性和一致性设计。它在 Kubernetes 中的主要作用是存储所有集群数据&#xff0c;包括配置数据和状态信息。ETCD 是 Kubernetes 的“大脑”&#xff0c;其稳定性对整个集群至…...

通过Geopandas进行地理空间数据可视化

目录 引言 安装与导入 数据加载与探索 数据预处理 基本地图可视化 添加其他数据到地图上 空间分析与查询 地图叠加与分组 空间缓冲区 交互式地图可视化 实际应用案例 城市规划 环境监测 结论 引言 在数据科学领域,地理空间数据可视化扮演着至关重要的角色。它不…...

堆(heap)

堆&#xff1f;对于初学者来说&#xff0c;或许是一个陌生十足的概念。 但&#xff01;堆不可怕。 什么是堆&#xff1f; 学术上&#xff0c;常常是这样说的&#xff08;一个完全二叉树&#xff09;。 没毛病&#xff0c;要想更好的理解堆(heap)&#xff0c;确实需要好好掌…...

Leetcode-回溯-组合型

22. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 这题并没有才有恢复现场的做法 而是直接覆盖 题目核心是看穿本质 在代码执行过程中左括号必须大于等于右括号 以及回溯最底层的递归条件是递归长度已经达到2n 还有做括号要小于n 又因为i左右 因此右等于i-左 ope…...

Modbus通信协议基础知识总结

1. 数据类型与存储区分类 Modbus协议将数据分为四类存储区&#xff0c;通过存储区代号区分&#xff1a; 输出线圈&#xff08;0x&#xff09;&#xff1a;可读写&#xff0c;对应二进制开关量&#xff08;如继电器状态&#xff09;&#xff0c;地址范围000001-065536&#xff…...

python pip 最最开始新手教程/pip安装jupyter

pip 安装 直接安排了python即安装了pip,一般找pip的是安装了python之后用不了的&#xff0c;出现问题的&#xff0c;我也是因为这个所以写了这篇文章。 一、找不到pip,在C盘的cmd 输入pip -- version显示没有的是因为pip不能直接使用&#xff0c;需要额外配置环境变量 在系统…...

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…...

[leetcode] 面试经典 150 题——篇3:滑动窗口

[leetcode] 面试经典 150 题——篇3&#xff1a;滑动窗口 方法概述基本原理适用场景示例说明 1. [中等] 长度最小的子数组(leetcode 209题)题目描述解题思路python代码 2. [中等] 无重复字符的最长子串(leetcode 5题)题目描述解题思路python代码 方法概述 滑动窗口是一种常用的…...

华为云虚拟化技术

‌华为云底层的虚拟化技术‌是一种将物理资源&#xff08;如服务器、存储设备和网络&#xff09;抽象成虚拟资源的技术。通过这种技术&#xff0c;用户可以将物理资源划分为多个虚拟资源&#xff0c;从而提高资源利用率和灵活性‌1。 华为云底层虚拟化的定义和作用 华为云底层…...

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…...

【AI】在AWS AI芯片服务上部署运行Qwen 2.5模型

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 准备选项 1:在 Amazon EC2 Inf2 上部署 TGI选项 2:在 SageMaker 上部署 TGI清理Qwen 2.5 多语言大型语言模型(LLMs) 是一系列预先…...

如何用日事清做研发目标、需求、规划、迭代、Bug、效能、复盘、绩效一站式管理

近年来&#xff0c;受监管环境趋严、盈利模式转型、市场竞争加剧等影响&#xff0c;互联网行业逐步进入深度变革与持续创新阶段。在此过程中&#xff0c;项目进度延期、需求频繁变更、开发流程混乱等痛点问题频发&#xff0c;导致部分互联网企业创新升级的步伐停滞不前。 企业…...

手搓智能音箱——语音识别及调用大模型回应

一、代码概述 此 Python 代码实现了一个语音交互系统&#xff0c;主要功能为监听唤醒词&#xff0c;在唤醒后接收用户语音问题&#xff0c;利用百度语音识别将语音转换为文本&#xff0c;再调用 DeepSeek API 获取智能回复&#xff0c;最后使用文本转语音功能将回复朗读出来。 …...

Docker安装mysql——Linux系统

拉取mysql镜像 docker pull mysql 查看镜像 docker images 运行镜像&#xff08;这一步的作用&#xff1a;数据持久化&#xff0c;通过挂载卷将日志、数据和配置文件存储在主机上&#xff0c;避免容器删除导致数据丢失&#xff09; docker run -p 3306:3306 --name mysql …...

Redis 面试思路

分布式redis面试思路俩点 高性能 高并发 高性能 1.存储在内存 所以速度快 2. 线程模型 io多路复用 监控多个客户端socket 放入队列里面 只是文件分发机制是单线程的 处理队列中的数据 根据不同类型 分发给不同处理器 后面处理的过程 也是多线程的 3. 内存回收机制 定期懒惰 …...

Oracle GoldenGate 全面解析

Oracle GoldenGate 全面解析 Oracle GoldenGate 是一种实时数据集成和复制解决方案,广泛应用于数据同步、数据库迁移、高可用性和灾难恢复等场景。以下将详细解答您提出的关于 Oracle GoldenGate 的一系列问题。 1. Oracle GoldenGate 的架构组成及其核心组件的作用 架构组成…...

【QT:控件】

目录 控件状态&#xff1a;​编辑 geometry : window frame windowlcon: qrc机制 qrc的使用方式&#xff1a; window opacity cursor font: ToolTip focusPolicy: styleSheet: 按钮类控件&#xff1a; PushButton: 给按钮添加图标&#xff1a; 给按钮添加快捷键…...

掌握xtquant:实时行情订阅与数据处理的实战指南

掌握xtquant&#xff1a;实时行情订阅与数据处理的实战指南 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化交易领域&#xff0c;实时行情的获取和处理是构建有效交易策略的关键。本文将深入探讨如何使用xtquant库进行实时行情的订阅与数据处理&#xff0c;帮…...

解决 Nginx 访问 /root/下 403 Forbidden 问题

文章目录 解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Nginx 配置 可能的原因/root 目录权限问题SELinux 限制 解决方案方案 1&#xff1a;移动文件到 /data/或 /var/www/(推荐方案)方案 2&#xff1a;修改 /root 目录权限&#xff08;不推荐&#xff09;方案…...