kubernets基础-ingress详细介绍
文章目录
- 什么是Ingress
- Ingress详细说明
- Ingress示例
- Ingress控制器
- Ingress控制器的工作原理
- Ingress控制器的特点
- 常见的Ingress控制器
- Ingress关联Ingress控制器
- 一、Ingress资源对象
- 二、Ingress控制器
- 三、Ingress与Ingress控制器的关联方式
- 四、注意事项
- 多实例部署
- 一、Ingress多实例配置概述
- 二、配置关键启动参数
- 三、创建IngressClass资源
- 四、创建Ingress资源并指定IngressClass
- 五、验证配置
- 六、注意事项
- 集群外部访问Ingress
- 一、部署Ingress控制器
- 二、创建Ingress资源
- 三、配置域名解析
- 四、验证访问
- 示例
- Ingress访问service
什么是Ingress
Ingress是Kubernetes中一种对集群中服务的外部访问进行管理的API对象,它典型的访问方式是HTTP和HTTPS。Ingress可以提供负载均衡、SSL和基于名称的虚拟托管等功能。不过,要实现Ingress的功能,必须
部署一个Ingress控制器
(如ingress-nginx)来满足Ingress资源的要求,仅创建Ingress资源本身是无效的。
Ingress公开了从集群外部到集群内部服务的HTTP和HTTPS路由,这些路由由Ingress资源上定义的规则来控制。可以将Ingress配置为提供服务外部可访问的URL、负载均衡流量、SSL/TLS,以及基于名称的虚拟主机等功能。
以下是Ingress的详细说明及示例:
Ingress详细说明
-
工作原理:
Ingress控制器通常负责通过负载均衡器来实现Ingress,它也可以配置边缘路由器或其他前端来帮助处理流量。Ingress不会公开任意端口或协议,如果需要将HTTP和HTTPS以外的服务公开到Internet,通常使用Service.Type=NodePort或Service.Type=LoadBalancer类型的服务。 -
功能特点:
- 负载均衡:Ingress可以根据定义的规则将外部流量分发到集群内部的不同服务上。
- SSL/TLS:Ingress可以配置SSL/TLS证书,为外部访问提供加密的HTTPS连接。
- 基于名称的虚拟托管:Ingress支持将不同的域名或URL路径映射到集群内部的不同服务上,实现基于名称的虚拟托管。
-
Ingress规则:
Ingress规则定义了如何将外部流量路由到集群内部的服务。规则可以基于域名、URL路径、请求头等信息进行匹配,并将匹配的流量转发到指定的后端服务。
Ingress示例
以下是一个使用Nginx Ingress控制器的Ingress资源示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:rules:- host: www.example.comhttp:paths:- path: /service1(/|$)(.*)pathType: Prefixbackend:service:name: service1port:number: 80- path: /service2(/|$)(.*)pathType: Prefixbackend:service:name: service2port:number: 80
在这个示例中,定义了一个名为my-ingress
的Ingress资源,它有两个规则:
- 当访问
www.example.com/service1
时,流量将被转发到名为service1
的后端服务上。 - 当访问
www.example.com/service2
时,流量将被转发到名为service2
的后端服务上。
注意:nginx.ingress.kubernetes.io/rewrite-target
注解用于重写目标URL,/$2
表示将匹配到的第二个捕获组作为重写后的目标URL。在这个示例中,由于路径中使用了正则表达式捕获组,因此需要进行重写以确保请求能够正确转发到后端服务。
另外,pathType
字段指定了路径的匹配类型,这里使用了Prefix
类型,表示基于路径前缀进行匹配。
这个示例展示了如何使用Ingress资源来定义外部流量到集群内部服务的路由规则,并实现了基于域名的虚拟托管。
Ingress控制器
Ingress控制器
是Kubernetes集群中的一个组件,它负责实现Ingress资源定义的路由规则
。Ingress资源
本身只是定义了一系列规则,指明了外部流量如何被转发到集群内的服务上,但实际
的流量转发
工作是由Ingress控制器
来完成的。
Ingress控制器的工作原理
-
监听Ingress资源变化:Ingress控制器通过Kubernetes的API服务器监听集群中Ingress资源的变化。当Ingress资源被创建、更新或删除时,Ingress控制器会感知到这些变化。
-
解析Ingress规则:Ingress控制器读取Ingress资源中定义的规则,这些规则通常包括域名、路径和后端服务等信息。Ingress控制器会根据这些规则生成相应的配置。
-
生成配置并应用:Ingress控制器根据解析后的规则生成配置,这些配置可能是Nginx、HAProxy或其他反向代理软件的配置文件。然后,Ingress控制器将这些配置应用到其管理的反向代理实例上。
-
流量转发:当外部流量到达Ingress控制器时,它会根据生成的配置将流量转发到相应的后端服务上。这通常涉及HTTP或HTTPS协议的解析、路由决策和负载均衡等过程。
Ingress控制器的特点
-
可扩展性:Ingress控制器可以支持多种反向代理软件,如Nginx、HAProxy等,从而提供了灵活的配置选项和性能优化空间。
-
动态更新:由于Ingress控制器通过Kubernetes的API服务器监听Ingress资源的变化,因此它可以动态地更新配置而无需重启服务。
-
安全性:Ingress控制器可以配置SSL/TLS证书,为外部流量提供加密传输。此外,它还可以实现身份认证和授权等功能,增强集群的安全性。
-
高可用性:Ingress控制器通常部署为多个副本,以确保在单个节点故障时仍能继续提供服务。
常见的Ingress控制器
-
Nginx Ingress Controller:这是最常用的Ingress控制器之一,它基于Nginx反向代理软件构建,提供了高性能和丰富的配置选项。
-
Traefik Ingress Controller:Traefik是一个易于使用的Ingress控制器,它支持多种反向代理后端,并提供了丰富的监控和日志功能。
-
HAProxy Ingress Controller:基于HAProxy构建的Ingress控制器,提供了高性能和可靠性。
-
Istio Ingress Gateway:Istio是一个服务网格解决方案,它提供了自己的Ingress Gateway组件,用于处理外部流量并将其转发到集群内的服务上。
总的来说,Ingress控制器是Kubernetes集群中处理外部流量访问的关键组件之一。通过配置Ingress资源和Ingress控制器,可以轻松地实现复杂的路由规则和流量管理策略。
Ingress关联Ingress控制器
在Kubernetes集群中,Ingress与Ingress控制器的关联是通过Ingress资源对象与Ingress控制器之间的协作实现的。以下详细解释Ingress如何关联Ingress控制器:
一、Ingress资源对象
Ingress资源对象是Kubernetes中的一个API对象,它定义了外部用户如何访问集群内部运行的服务。Ingress资源对象通常包含以下关键信息:
- 规则(Rules):指定了哪些域名和路径应该被转发到哪些后端服务上。
- 后端服务(Backend Services):定义了Ingress规则所指向的具体服务,通常包括服务名称和端口号。
二、Ingress控制器
Ingress控制器是一个运行在Kubernetes集群中的组件,它负责监听Ingress资源对象的变化,并根据这些变化动态地更新其内部的配置,以实现流量的路由和转发。Ingress控制器通常具备以下功能:
- 监听Ingress资源变化:通过Kubernetes的API服务器实时感知Ingress资源对象的变化。
- 解析Ingress规则:读取Ingress资源对象中定义的规则,并解析为可执行的配置。
- 流量转发:根据解析后的规则,将外部流量转发到相应的后端服务上。
三、Ingress与Ingress控制器的关联方式
- 定义Ingress资源对象:
- 在Kubernetes集群中,首先需要定义一个Ingress资源对象,该对象包含了外部访问集群内部服务的规则。
- 可以通过YAML文件或其他方式定义Ingress资源对象,并使用
kubectl apply
命令将其应用到集群中。
- 部署Ingress控制器:
- 在Kubernetes集群中部署Ingress控制器,这通常是通过部署一个Pod或DaemonSet来实现的。
- Ingress控制器会监听集群中Ingress资源对象的变化,并根据这些变化动态地更新其配置。
- 自动关联:
- 一旦Ingress资源对象和Ingress控制器都被正确部署到Kubernetes集群中,它们之间就会自动建立关联。
- Ingress控制器会根据Ingress资源对象中定义的规则,将外部流量转发到相应的后端服务上。
- 验证配置:
- 为了确保Ingress和Ingress控制器之间的关联正确无误,可以通过查看Ingress控制器的日志或使用
kubectl get ingress
命令来验证Ingress资源对象的状态和配置。
- 为了确保Ingress和Ingress控制器之间的关联正确无误,可以通过查看Ingress控制器的日志或使用
四、注意事项
- Ingress控制器的实现和功能可能会因所使用的具体控制器(如Nginx Ingress Controller、Traefik Ingress Controller等)而有所不同。因此,在部署和使用Ingress时,需要参考相应控制器的文档和配置指南。
- Ingress控制器通常需要配置为使用NodePort、LoadBalancer或IngressClass等类型的服务来暴露外部访问的入口点。这取决于集群的部署环境和网络配置。
综上所述,Ingress与Ingress控制器的关联是通过在Kubernetes集群中定义Ingress资源对象并部署Ingress控制器来实现的。它们之间的协作使得外部用户可以通过定义的规则和路径访问集群内部的服务。
多实例部署
在Kubernetes(K8s)集群中配置Ingress多实例,通常是为了实现更复杂的路由规则、负载均衡或提供不同的服务访问入口。以下是在K8s中配置Ingress多实例的详细步骤:
一、Ingress多实例配置概述
Ingress是K8s中用于管理外部访问集群内部服务的资源对象。通过Ingress,可以配置基于主机名和路径的路由规则,将外部请求定向到集群内部的服务。为了实现Ingress多实例,需要为每个实例配置唯一的标识,并确保它们不会相互干扰。
二、配置关键启动参数
-
不同命名空间下的多实例:
- 如果要在不同的命名空间下部署多个Ingress实例,可以通过设置
controller-class
和ingress-class
参数来区分它们。这些参数在Ingress控制器的启动参数中指定,并确保它们的唯一性。 - 示例配置(YAML格式):
args:- /nginx-ingress-controller- --controller-class=k8s.io/prod-internal # 控制器类,必须唯一- --ingress-class=prod-internal # ingress类,必须唯一
- 如果要在不同的命名空间下部署多个Ingress实例,可以通过设置
-
相同命名空间下的多实例:
- 如果需要在同一个命名空间下部署多个Ingress实例,除了设置
controller-class
和ingress-class
参数外,还需要设置election-id
参数来确保选举的唯一性。 - 示例配置(YAML格式):
args:- /nginx-ingress-controller- --election-id=ingress-controller-leader-prod-internal # 选举ID,必须唯一- --controller-class=k8s.io/prod-internal # 控制器类,必须唯一- --ingress-class=prod-internal # ingress类,必须唯一
- 如果需要在同一个命名空间下部署多个Ingress实例,除了设置
三、创建IngressClass资源
为每个Ingress实例创建一个唯一的IngressClass资源。IngressClass资源定义了Ingress控制器的相关信息,包括控制器名称和参数等。
示例配置(YAML格式):
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: prod-internal
spec:controller: k8s.io/prod-internal
四、创建Ingress资源并指定IngressClass
在创建Ingress资源时,通过ingressClassName
字段指定要使用的IngressClass。这样,Ingress资源就会由对应的Ingress控制器管理。
示例配置(YAML格式):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: testnamespace: prod
spec:ingressClassName: prod-internalrules:- host: "foo.bar.com"http:paths:- path: /testpathType: Prefixbackend:service:name: xwd-socialport:number: 80
五、验证配置
-
检查Ingress和IngressClass:
- 使用
kubectl get ingress
和kubectl get ingressclass
命令检查Ingress和IngressClass资源是否已正确创建。
- 使用
-
访问测试:
- 根据配置的域名和路径访问Ingress服务,验证请求是否正确路由到后端服务。
六、注意事项
- 唯一性:确保每个Ingress实例的
controller-class
、ingress-class
和(在相同命名空间下)election-id
参数是唯一的,以避免冲突。 - 资源隔离:如果可能的话,将不同的Ingress实例部署在不同的命名空间中,以减少配置上的复杂性。
- 监控和日志:为Ingress控制器配置监控和日志记录,以便及时发现和解决问题。
通过以上步骤,您可以在K8s集群中成功配置多个Ingress实例,实现更复杂的路由规则和负载均衡策略。
集群外部访问Ingress
在Kubernetes集群中,Ingress提供了一种管理外部访问流量的方式,允许将外部HTTP和HTTPS流量路由到集群内部的服务。要使集群外部能够访问Ingress,通常需要按照以下步骤进行配置:
一、部署Ingress控制器
Ingress控制器
是实际
实现Ingress资源定义的组件,它负责监听Ingress资源的变化,并根据定义更新负载均衡器或反向代理服务器的配置。常见的Ingress控制器包括Nginx Ingress Controller、Traefik等。
- 选择Ingress控制器:根据集群环境和需求选择合适的Ingress控制器。
- 安装Ingress控制器:按照Ingress控制器的官方文档进行安装。通常,这包括下载相应的YAML文件并应用到Kubernetes集群中。
二、创建Ingress资源
Ingress资源定义了从集群外部到内部服务的路由规则。
- 定义Ingress规则:在Ingress资源中指定想要暴露的服务、路由规则、TLS配置等。
- 应用Ingress资源:将定义好的Ingress资源应用到Kubernetes集群中。
三、配置域名解析
为了使外部用户能够通过域名访问Ingress,需要在域名解析服务商
处配置解析记录
,将域名指向集群的Ingress IP地址。这通常涉及以下步骤:
- 获取Ingress IP地址:在Kubernetes集群中,Ingress控制器通常会创建一个负载均衡器,并分配一个IP地址。需要获取这个IP地址。
- 配置域名解析:在域名解析服务商的网站上,为域名添加一条A记录或CNAME记录,将域名指向Ingress IP地址。
四、验证访问
完成以上步骤后,可以通过访问配置的域名来验证Ingress是否按预期工作。如果一切正常,应该能够访问到集群内部的服务。
示例
以下是一个使用Nginx Ingress控制器和Ingress资源的示例:
-
部署Nginx Ingress控制器:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-x.y.z/deploy/static/provider/cloud/deploy.yaml
其中
x.y.z
是Nginx Ingress控制器的版本号,需要根据实际情况进行替换。 -
创建Ingress资源:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: my-ingress spec:rules:- host: myapp.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80
在这个示例中,定义了一个名为
my-ingress
的Ingress资源,它将myapp.example.com
域名的流量路由到名为my-service
的后端服务上。 -
配置域名解析:在域名解析服务商处,为
myapp.example.com
添加一条A记录,将域名指向Ingress控制器的IP地址。 -
验证访问:在浏览器中访问
myapp.example.com
,应该能够访问到my-service
服务提供的内容。
通过以上步骤,集群外部的用户就可以通过域名访问到Kubernetes集群内部的服务了。
Ingress访问service
Ingress访问Service的流程
当外部用户通过域名访问Ingress时,Ingress控制器的工作流程如下:
- 接收请求:Ingress控制器监听在指定的端口(通常是80和443)上,接收来自外部的HTTP和HTTPS请求。
- 匹配规则:Ingress控制器根据Ingress资源中定义的规则,匹配请求的域名和路径。
- 转发请求:一旦匹配到规则,Ingress控制器会将请求转发到对应的后端Service上。这通常涉及将请求转发到Service的ClusterIP,然后由Service将请求进一步分发到其背后的Pod上。
- 处理响应:Pod处理请求并生成响应,响应通过Service、Ingress控制器返回给外部用户。
相关文章:

kubernets基础-ingress详细介绍
文章目录 什么是IngressIngress详细说明Ingress示例 Ingress控制器Ingress控制器的工作原理Ingress控制器的特点常见的Ingress控制器 Ingress关联Ingress控制器一、Ingress资源对象二、Ingress控制器三、Ingress与Ingress控制器的关联方式四、注意事项 多实例部署一、Ingress多…...

jenkins部署Maven和NodeJS项目
在 Java 项目开发中,项目的编译、测试、打包等是比较繁琐的,属于重复劳动的工作,浪费人力和时间成本。以往开发项目时,程序员往往需要花较多的精力在引用 jar 包搭建项目环境上,跨部门甚至跨人员之间的项目结构都有可能…...
在unity资源中发现无效引用
本文主要解决在不打开unity的情况下搜索出无效引用的资源的方法 1. 概述 一般只要遍历一下目录里所有资源,判空一下就好了但有些情况下,不希望打开unity, 尤其希望是在资源整合时,想更快验证资源的合法性, 这对合并提交及出包验证时,都要较大的需求 2. 简单的验证方法 简单来…...

C#知识|基于反射和接口实现抽象工厂设计模式
哈喽,你好啊,我是雷工! 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中; 02 抽象工厂组成 抽象工厂包括抽象产品(即业务接口,可以通过抽象类或抽象接口设计)…...
【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典
摘要 在分布式系统的世界里,gRPC和RPC是两个耳熟能详的术语,但它们之间有何区别和联系?本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现,提供高性能的跨语言远程…...
听说这是MATLAB基础?
MATLAB(矩阵实验室)是一个强大的高性能计算环境和编程语言,广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识,涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区…...

【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现
前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异,但是都…...

数据流和数据流处理技术
一数据流 首先明确数据流概念:数据流是连续不断生成的、快速变化的无界数据序列 数据流类型: 数据流大致可以分为四种类型 1.连续型数据流:不断地产生数据,数据稳定速度输入系统。 2.突发型数据流:在某特定时间或…...

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案
系列文章目录 文章目录 系列文章目录一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...

解决TikTok无网络连接问题解析
随着社交媒体的快速发展,TikTok已成为全球用户最喜欢的短视频平台之一,吸引了数以亿计的用户。然而,在享受这个平台时,用户经常会遇到无网络连接的问题,这不仅影响观看体验,还可能导致无法上传内容或参与社…...

k8s中,ingress的实现原理,及其架构。
图片来源:自己画的 图片来源:k8s官网 首先,什么是ingress? 是服务还是控制器? 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作,组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡
应用题打卡 数组的应用 对称矩阵的压缩存储 注意: 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意: 上/下三角压缩存储是将0元素统一压缩存储,而不是将对角线元素统一压缩存储 三对角矩阵的…...
解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found
目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时,有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...
Dubbo和Http的调用有什么区别
背景 我们在项目开发中,需要进行调用外部接口时,往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上,有什么区别呢? 定位不同 一个是分布式环境下的框架,一个是通信协议。 Dubbo:是一种高性能的…...

ARM 架构、cpu
一、ARM的架构 ARM是一种基于精简指令集(RISC)的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点: 精简指令集:ARM芯片使用精简指令集,即每条指令只完成一项简单的操作,从而提高指令的执行效率…...
【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解
1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...
u2net网络模型训练自己数据集
单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点
会话技术: cookie jwt令牌会话技术: jwt生成: Claims:jwt中的第二部分 过滤器: 拦截器: 前端无法识别controller方法,因此存在Dispa什么的...

数据架构图:从数据源到数据消费的全面展示
在这篇文章中,我们将探讨如何通过架构图来展示数据的整个生命周期,从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图,展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源:分为内部数据源&…...
useEffect 与 useLayoutEffect 的区别
useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数,有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同:4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...