Apollo中间件技术:从入门到精通
一、引言
在Java开发的微服务架构中,配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化,传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,成为了众多Java开发者的首选。本文将带你全面了解Apollo中间件技术,从入门到精通,让你轻松掌握Apollo的使用。
二、Apollo简介
2.1 什么是Apollo
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置。配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
2.2 Apollo的主要特性
- 统一管理不同环境、不同集群的配置:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。同一份代码部署在不同的集群,可以有不同的配置,比如ZooKeeper的地址等。
- 配置修改实时生效(热发布):用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。
- 版本发布管理:所有的配置发布都有版本概念,从而可以方便地支持配置的回滚。
- 灰度发布:支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例。
- 权限管理:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
- 操作审计:所有的操作都有审计日志,可以方便地追踪问题。
- 客户端配置信息监控:可以方便地看到配置在被哪些实例使用。
- 多语言支持:提供了Java和.Net的原生客户端,方便应用集成。同时提供了Http接口,非Java和.Net应用也可以方便地使用。
三、Apollo的架构设计
3.1 Apollo的整体架构
Apollo的整体架构包含以下几个核心组件:
- Apollo Portal(管理界面):提供Web界面供管理员进行配置管理,包括查看、编辑、发布配置等。
- Apollo Admin Service(管理服务):负责配置的修改、发布等功能,服务对象是Apollo Portal。
- Apollo Config Service(配置服务):负责配置的读取、推送等功能,服务对象是Apollo客户端。
- Apollo Client(客户端):集成在各个应用中,负责与Apollo Config Service进行通信,获取最新的配置。
- Eureka:提供服务注册和发现功能,用于Apollo的各个组件进行服务注册和发现。
- Meta Server:对Eureka的服务发现接口进行封装,提供统一的服务访问入口。
3.2 Apollo的工作流程
- 用户在Apollo Portal上添加或修改配置信息:比如数据库的连接参数等。
- Apollo Portal调用Apollo Admin Service的接口进行配置的修改和发布:Apollo Admin Service将配置信息存储到数据库中,并写入数据库消息表ReleaseMessage中。
- Apollo Config Service通过定时任务扫描ReleaseMessage表:获取最新的配置发布消息,并通知对应的Apollo Client。
- Apollo Client接收到配置更新通知后:从Apollo Config Service拉取最新的配置信息,并更新本地缓存。
- Apollo Client将最新的配置信息通知到应用程序:应用程序根据最新的配置信息进行相应的处理。
四、Apollo的安装与配置
4.1 准备工作
在安装Apollo之前,需要确保已经安装了以下软件:
- Java:Apollo服务端需要Java 1.8+,Apollo客户端需要Java 1.7+。
- MySQL:Apollo需要MySQL 5.6.5+来存储配置信息和元数据。
4.2 下载Apollo源码或安装包
可以从Apollo的GitHub仓库下载源码进行编译,也可以下载官方提供的编译好的安装包。
4.3 创建数据库
Apollo需要两个数据库:ApolloPortalDB和ApolloConfigDB。可以从Apollo的GitHub仓库下载对应的SQL脚本,导入到MySQL中。
4.4 配置Apollo
在Apollo的源码或安装包的config目录下,找到application.properties文件,进行相关的配置,包括数据库连接信息、服务端口等。
4.5 启动Apollo服务
在Apollo的源码或安装包的scripts目录下,找到启动脚本(如demo.sh),执行启动命令即可启动Apollo服务。
五、Apollo的使用
5.1 Apollo Portal的使用
5.1.1 登录Apollo Portal
在浏览器中访问Apollo Portal的地址(如http://localhost:8070),输入用户名和密码进行登录^[2][3][9][12]^。
5.1.2 管理配置
- 创建应用:在Apollo Portal上创建一个新的应用,指定应用名、负责人等信息。
- 添加环境:为应用添加不同的环境(如DEV、TEST、PROD等)。
- 添加集群:为应用的不同环境添加集群(如上海集群、北京集群等)。
- 添加命名空间:为应用添加命名空间,用于管理不同的配置项。Apollo支持多种命名空间类型,如public(公共命名空间)、private(私有命名空间)、application(应用命名空间)等。
- 添加配置项:在指定的命名空间下添加配置项,包括配置项名、配置项值、数据类型等信息。
- 发布配置:在添加或修改完配置项后,点击发布按钮将配置发布到指定的环境和集群中。
5.2 Apollo Client的使用
5.2.1 引入Apollo Client依赖
在需要使用Apollo配置的应用中,引入Apollo Client的依赖。以Maven项目为例,可以在pom.xml文件中添加以下依赖:
xml复制代码
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>最新版本号</version>
</dependency>
5.2.2 配置Apollo Client
在应用的配置文件中(如application.properties或application.yml),配置Apollo Client的相关参数,包括应用ID、环境、Meta Server地址等。例如:
properties复制代码 app.id=your-app-id env=DEV apollo.meta=http://localhost:8080
5.2.3 获取配置
在应用程序中,可以通过Apollo Client提供的API获取配置。例如:
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
public class ApolloConfigExample {
public static void main(String[] args) {
// 获取默认namespace的配置
Config config = ConfigService.getAppConfig();
String someKey = config.getProperty("some.key", "defaultValue");System.out.println("some.key = " + someKey);
// 获取指定namespace的配置
Config customNamespaceConfig = ConfigService.getConfig("customNamespace");
String anotherKey = customNamespaceConfig.getProperty("another.key", "defaultValue");System.out.println("another.key = " + anotherKey);}
}
5.2.4 监听配置变化
Apollo Client还提供了监听配置变化的功能,当配置发生变化时,可以自动通知应用程序进行相应的处理。例如:
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import com.ctrip.framework.apollo.spring.boot.ApolloApplicationInitializer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableApolloConfig
public class ApolloConfigChangeListenerExample {
public static void main(String[] args) {SpringApplication.run(ApolloConfigChangeListenerExample.class, args);}
@Bean
public ApolloApplicationInitializer apolloApplicationInitializer() {
return new ApolloApplicationInitializer();}
@Bean
public ConfigChangeListener configChangeListener() {
return new ConfigChangeListener() {
@Override
public void onChange(ConfigChangeEvent changeEvent) {
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);System.out.println(String.format(
"Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s",change.getPropertyName(), change.getOldValue(),change.getNewValue(), change.getChangeType()));}}};}
}
六、Apollo的高级特性
6.1 灰度发布
Apollo支持配置的灰度发布,即发布的配置信息对一部分服务器生效,对一部分服务器不生效。灰度发布可以通过IP地址、应用实例ID等方式进行限制。例如,在发布配置时,可以选择只对某个IP地址范围内的应用实例生效,观察一段时间没有问题后再推给所有应用实例。
6.2 权限管理
Apollo提供了完善的权限管理机制,对配置的管理分为了编辑和发布两个环节。管理员可以为不同的用户或用户组分配不同的权限,从而确保配置的安全性和合规性。
6.3 操作审计
Apollo记录了所有的操作日志,包括配置的增删改查、发布、回滚等操作。管理员可以通过审计日志追踪问题的根源,确保配置的安全性和可追溯性。
6.4 客户端配置信息监控
Apollo提供了客户端配置信息监控功能,可以方便地看到配置在被哪些实例使用。这对于故障排查和性能优化非常有帮助。
七、Apollo与Spring Cloud Config的对比
7.1 功能对比
功能点 | Apollo | Spring Cloud Config |
配置管理界面 | 提供统一的Web界面 | 需要结合Git等工具使用 |
配置实时推送 | 支持(1秒内) | 不支持(需要轮询) |
灰度发布 | 支持 | 不支持 |
权限管理 | 完善 | 需要结合Spring Security等使用 |
操作审计 | 提供 | 需要结合其他日志系统使用 |
客户端语言支持 | Java、.Net等 | Java(Spring Cloud生态) |
7.2 性能对比
在性能方面,Apollo和Spring Cloud Config各有优劣。Apollo通过长轮询和消息队列的方式实现了配置的实时推送,性能较高;而Spring Cloud Config则需要客户端定期轮询配置服务器,性能相对较低。但是,在实际应用中,性能的差异可能并不会对大多数场景产生显著影响。
7.3 生态对比
Spring Cloud Config作为Spring Cloud生态的一部分,与Spring Cloud的其他组件(如Eureka、Zuul等)有着良好的集成和兼容性。而Apollo虽然也提供了对Spring Cloud的支持,但在生态方面相对较弱。不过,Apollo凭借其强大的功能和灵活的架构,在越来越多的企业中得到了广泛的应用。
八、Apollo的常见问题与解决方案
8.1 无法连接到Apollo服务器
可能的原因包括Apollo服务器未启动、网络问题、配置错误等。解决方案包括检查Apollo服务器的启动状态、检查网络连接、检查Apollo Client的配置等。
8.2 发布配置时出现问题
可能的原因包括权限不足、配置格式错误、数据库连接问题等。解决方案包括检查用户的权限、检查配置的格式、检查数据库的连接状态等。
8.3 客户端无法获取最新配置
可能的原因包括Apollo服务器未推送最新配置、客户端缓存未更新、客户端配置错误等。解决方案包括检查Apollo服务器的日志、检查客户端的缓存策略、检查客户端的配置等。
8.4 灰度发布未生效
可能的原因包括灰度发布规则配置错误、客户端未正确识别灰度发布规则等。解决方案包括检查灰度发布规则的配置、检查客户端的日志等。
九、Apollo的未来展望
随着微服务架构的普及和复杂度的增加,配置管理的重要性日益凸显。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,在越来越多的企业中得到了广泛的应用。未来,Apollo将继续优化和完善其功能,提高性能和稳定性,为开发者提供更加便捷、高效的配置管理服务。
同时,随着人工智能、大数据等技术的不断发展,Apollo也将积极探索与这些技术的结合点,为开发者提供更加智能、全面的配置管理解决方案。例如,通过引入机器学习算法对配置进行智能分析和预测,提高配置的准确性和可靠性;通过大数据技术对配置的使用情况进行实时监控和分析,为开发者提供更加精准的运维支持等。
十、总结
通过本文的介绍,相信你已经对Apollo中间件技术有了全面的了解。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,在微服务架构中发挥着越来越重要的作用。作为Java开发者,掌握Apollo的使用将大大提高你的开发效率和系统的可维护性。希望本文能够对你有所帮助,如果你在使用过程中遇到任何问题或疑问,欢迎随时向我提问。
相关文章:
Apollo中间件技术:从入门到精通
一、引言 在Java开发的微服务架构中,配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化,传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,成为…...
汽车行业的MES系统方案(附案例资料合集)
针对汽车行业的MES系统方案,以下是一些关键点和实施案例: 核心功能: 实时监控:MES系统通过传感器和物联网技术实时监控生产线上的每一个环节,确保信息的及时传递。数据分析:系统对收集的数据进行深度分析&a…...
Python入门:7.Pythond的内置容器
引言 Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器&…...
单片机与MQTT协议
MQTT 协议简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布 / 订阅(publish/subscribe)模式的 “轻量级” 通讯协议,该协议构建于 TCP/IP 协议上…...
记录命令行操作树莓派Wifi的方式
打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一(bullseye及以前版本才可用,bookworm版本) sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…...
Docker 安装mysql ,redis,nacos
一、Mysql 一、Docker安装Mysql 1、启动Docker 启动:sudo systemctl start dockerservice docker start 停止:systemctl stop docker 重启:systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...
[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)
文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步:计算 (a*c) (-b*d)i2.1.4 第2步:计算 (a*d) (b*c)i2.1.5 第3步:计算结果合并 2.2 算法实现(UseVectors)2.…...
curl 放弃对 Hyper Rust HTTP 后端的支持
curl 放弃了对使用 Rust 编写 Hyper HTTP 后端的支持,因为用户和开发者对此功能的需求很少。 curl 创始人兼核心开发者 Daniel Stenberg 表示,尽管这项工作最初由 ISRG 赞助并且看起来很有希望,但 Hyper 支持多年来一直处于实验阶段…...
RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗
在现代智能硬件开发中,选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片,凭借其卓越的能效比、多功能扩展性和优秀的实时性能,已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…...
RBAC权限控制
1、Spring Security 是一个功能强大的Java安全框架,它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类(源码逐行解析) Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能,以确保Web应…...
Linux高并发服务器开发 第六天(rwx 对于目录和文件的区别 gcc编译器 动态库静态库)
目录 1.rwx 对于目录和文件的区别 2.gcc 编译器 2.1编译过程 2.2gcc 的其他参数 3.动态库和静态库 3.1函数库 1.rwx 对于目录和文件的区别 r 文件的内容可以被查看。支持cat、more、head...vim ;目录的内容可以被查看。ls、tree …...
如何使用远程控制工具管理你的计算机系统
在现代工作环境中,远程控制技术越来越重要,尤其是对于系统管理员、技术支持人员以及需要远程工作的人来说。远程控制不仅仅是便捷,更是提高工作效率、快速解决问题的重要手段。今天,我们将讨论一些常见的远程控制工具,…...
在K8S中,CNI有什么作用?
在kubernetes中,Container Network Interface(CNI)起着至关重要的作用,主要解决了容器网络配置及通信的问题,确保了Pod间网络连通性及其外部世界的通信。CNI的具体作用包括但不限于以下几个方面。 1. 网络配置自动化: 当kuberne…...
C语言性能优化:从基础到高级的全面指南
引言 C 语言以其高效、灵活和功能强大而著称,被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而,要写出高性能的 C 语言代码,需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术,并通过…...
JS中Symbol (符号)数据类型详解和应用场景
JavaScript中Symbol数据类型详解 Symbol是ES6引入的一种原始数据类型,表示唯一的标识符。它是通过Symbol()函数生成的,每次调用都会返回一个独一无二的值。Symbol值的主要用途是为对象的属性提供唯一标识,以避免属性名冲突。 特点 唯一性 每…...
Go gin框架(详细版)
目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go?改动的地方 index.html?改动的地方 style.css?改…...
Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid
目录 1. 进程的等待 1.1 为什么需要等待 2. 进程等待的方法 1. wait 2. waitpid 3. 获取子进程status 4. 阻塞与非阻塞等待 续接前文: Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit-CSDN博客https://blog.csdn.net/hedhjd/artic…...
blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质
描述:在blender中合并的模型导出为glb,在threejs中导入仍显示多个mesh,并不是统一的整体,导致需要整体高亮或者使用DragControls等不能统一控制。 原因:模型有多个材质,在blender中合并的时候,…...
探索多模态大语言模型(MLLMs)的推理能力
探索多模态大语言模型(MLLMs)的推理能力 Multimodal Large Language Models (MLLMs) flyfish 原文:Exploring the Reasoning Abilities of Multimodal Large Language Models (MLLMs): A Comprehensive Survey on Emerging Trends in Mult…...
[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)
wireshark 下载链接:https://pan.quark.cn/s/eab7f1e963be 提取码:rRAg 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wireshark…...
单片机实物成品-007 汽车防盗系统(代码+硬件+论文)
汽车尾气监测系统(温度震动传感器 红外热释电GPS三个指示灯蜂鸣器正常模式防盗模式wifi传输控制送APP源码 ) 把该系统划分为两个不同设计主体,一方面为硬件控制主体,通过C语言来编码实现,以STM32开发板为核心控制器&a…...
redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线
文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...
windows系统下使用cd命令切换到D盘的方法
windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端,使用 cd d:命令,无法将当前目录切换到D盘 解决方法 方法一:使用下面这条命令 cd /d d:运…...
word参考文献第二行缩进对齐
刚添加完参考文献的格式是这样: ”段落“—>缩进修改、取消孤行控制 就可以变成...
Springboot关于格式化记录
日期格式化 返回前端日期需要格式化 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version> </dependency>JsonFormat(pattern "yyyy-MM-dd…...
1.business english--build rapport
build rapport with someone 建立融洽关系 Salespeople often try to build rapport with customers to boost sales. user a variety of appropriate questions. answer the question according to your experience. Do you know how to make a good connection with others…...
发明专利与实用新型专利申请过程及自助与代办方式对比
申请专利(发明专利、实用新型专利、外观设计专利)有两种方式:1、自己直接向国家知识产权局申请。2、通过专利代办处申请。以下是对这两种专利类型(发明专利、实用新型专利)申请过程及两种申请方式的详细介绍和对比,参考…...
设计模式-创建型-工厂方法模式
什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是 创建型设计模式之一,目的是通过定义一个用于创建对象的接口,让子类决定实例化哪个类。简而言之,工厂方法模式通过延迟对象的创建过程到子类来…...
如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?
目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们,学术论文写作的旅程是不是感觉像是走进了迷雾森…...
Linux驱动开发--字符设备驱动开发
一、概述 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 Linux 应用程序对驱动程…...
Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON
这里是Themberfue 在学习完简单的网络编程后,我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时,我们通过一个线程处理连接的申请,随后通过多线程或者线程…...
828华为云征文|使用sysbench对Flexus X实例对mysql进行性能测评
目录 一、Flexus X实例概述 1.1?Flexus X实例 1.2?在mysql方面的优势 二、在服务器上安装MySQL 2.1 在宝塔上安装docker 2.2 使用宝塔安装mysql 2.3 准备测试数据库和数据库表 三、安装sysbench并进行性能测试 3.1 使用yum命令sysbench 3.2?运行?sysbench 并进行…...
数据结构:堆
目录 1.堆的概念 2.堆的结构 3.堆的初始化 4.堆的销毁 5.堆的插入 6.堆的删除 7.判断堆是否为空 1.堆的概念 堆的性质: 堆中某个结点的值总是不大于或不小于其父结点的值; 堆总是一棵完全二叉树。 以下堆的结构默认大堆 : 2.堆的结…...
洪水灾害多智能体分布式模拟示例代码
1. 环境定义:支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...
基于 Ragflow 搭建知识库-初步实践
基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具,可用于构建知识库,实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库,包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…...
Selenium实践总结
1.使用显示等待而不是隐式等待 隐式等待可能会导致不可预测的测试行为,尤其是在动态 Web 应用程序中。显式等待,它允许您 等待特定条件发生后再继续测试,这种方法提供了更多的控制和可靠性。 WebDriverWait wait new WebDriverWait(drive…...
华为麦芒5(安卓6)termux记录 使用ddns-go,alist
下载0.119bate1 安卓5和6版本,不能换源,其他源似乎都用不了,如果root可以直接用面具模块 https://github.com/termux/termux-app/releases/download/v0.119.0-beta.1/termux-app_v0.119.0-beta.1apt-android-5-github-debug_arm64-v8a.apk 安装ssh(非必要) pkg install open…...
Springboot jar包加密加固并进行机器绑定
获取机器码,通过classfinal-fatjar-1.2.1.jar来获取机器码 命令:java -jar classfinal-fatjar-1.2.1.jar -C 对springboot打包的jar进行加密功能 java -jar classfinal-fatjar-1.2.1.jar -file lakers-ljxny-3.0.0.jar -packages com.lygmanager.laker…...
【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局
我的个人主页 文章专栏:Microi吾码 一、引言 在当今数字化浪潮汹涌澎湃的时代,软件开发的需求呈现出爆发式增长。企业为了在激烈的市场竞争中脱颖而出,不断寻求创新的解决方案以加速数字化转型。传统的软件开发方式往往面临着开发周期长、技…...
系统思考—冰山模型
“卓越不是因机遇而生,而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越,从来不是一次性行为,而是一种习惯。正如我们在日常辅导中常提醒自己:行为的背后,隐藏着选择的逻辑,而选择的根源,源…...
Java读取InfluxDB数据库的方法
本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、tag等。 首先,创建一个Java项目,用于撰写代码。如果大家是基于IDEA来创建项目,则可…...
【mybatis-plus问题集锦系列】在mybatisplus中无法autowired的原因排查及解决
mybatisplus简化了我们做数据操作,大大提升了我们的开发速度,但是今天在做测试的时候,突然报了这么个错误,排查好久才找到解决方案,特此记录下 问题复现 这里的测试方法报错,通过不了测试 org.springf…...
python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作
步骤 1:安装必要的库 首先,安装 pywin32 和 selenium: pip install pywin32 selenium 如果使用的是 macOS,可以安装 pyobjc: pip install pyobjc 步骤 2:使用 pywin32 复制图像到剪贴板 在 Windows 系统中…...
uniapp——微信小程序,从客户端会话选择文件
微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档: chooseMessageFile 微信小程序读取文件,请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…...
点亮核心板小灯 STM32U575
将核心板上的运行状态指示灯点亮 任务分析 灯如何点亮 如何看开发板原理图 开发板上的灯硬件组成 原理图 原理图(Schematic Diagram),也称为电路图或电气图,是一种图形表示方法,用于展示电子系统或电路的工作原理和…...
“图书馆服务自动化”:基于SSM框架的图书借阅系统开发
3.1系统的需求分析 需求分析阶段是设计系统功能模块的总方向,可以这样来说,系统的整个的开发流程以及设计进度,基本上都是以需求分析为基本依据的[10]。需求分析阶段可以确定系统的基本功能设计,以及在最后的系统验收阶段…...
顶顶通呼叫中心中间件的三种呼叫方式(mod_cti基于FreeSWITCH)
顶顶通呼叫中心共有三种呼叫方式: 手拨呼叫点击呼叫自动外呼 联系我们 有意向了解呼叫中心中间件的用户,可以点击该链接添加工作人员:https://blog.csdn.net/H4_9Y/article/details/136148229 手拨呼叫 手拨呼叫属于常规的呼叫方式&…...
HCIA笔记9--NAT、ACL与链路聚合
1. ACL ACL: 访问控制列表, Access Control List。 通过定义规则来允许或拒绝流量的通过。 1.1 ACL分类 1.2 配置实例 如图所示,对R2的访问只允许192.168.1.0/24网段。 我们可以配置基本acl来限制 acl 2000 acl number 2000 rule 5 permit source 192.168.1.0 0…...
【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
(配置出来的web服务器又叫虚拟主机……) 下载apache2 sudo apt update sudo apt install apache2 (一)ip相同 web端口不同的web服务器 进入 /var/www/html 创建站点一和站点二的目录文件(目录文件名自定义哈&#x…...
“校园健康数据管理”:疫情管控系统的信息收集与分析
3.1可行性分析 通过对系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1 技术可行性 1.硬件可行性分析 校园疫情管控系统系统的硬件要求方面不存在特殊的要求,…...