Spring Boot数据库配置全解析:从基础到高可用实战
1. 项目概述为什么一个配置文件值得深究如果你做过Java后端开发尤其是Spring Boot项目那么对application.yml这个文件一定不会陌生。它就像项目的“总控制台”而数据库配置无疑是这个控制台上最核心、最不容有失的几根“线缆”之一。表面上看它不过是几行定义URL、用户名和密码的文本但在我十多年的踩坑经验里这里埋藏的“雷”足以让一个项目从上线平稳运行瞬间变为半夜报警的灾难现场。今天我们不聊高深的架构就扎扎实实地把application.yml里的数据库配置掰开揉碎了讲清楚。你可能会想这有什么好讲的不就是spring.datasource.url、username、password三件套吗但事实是从驱动选择、连接池调优到生产环境多数据源隔离、连接泄露排查每一个环节都藏着魔鬼。比如你知道multipleActiveResultSetstrue这个参数在什么场景下必须加加了又会对数据库产生什么潜在影响吗又或者面对不同的数据库MySQL, PostgreSQL, Oracle配置写法有哪些细微却关键的差异这些细节官方文档往往一笔带过却正是区分“能跑起来”和“跑得稳健”的关键。这篇文章我将以一个老鸟的视角带你重新审视application.yml中的数据库配置。我们会从最基础的配置项讲起深入到连接池原理与参数调优再探讨多环境、多数据源等复杂场景的实战方案最后分享我积累的一整套问题排查心法。目标很简单让你配出的数据库连接不仅能用而且高效、稳定、易维护。2. 基础配置深度解析不止于用户名和密码当我们新建一个Spring Boot项目引入spring-boot-starter-data-jpa或spring-boot-starter-data-jdbc后第一件事就是在application.yml里写上数据库连接信息。但很多人止步于此留下了隐患。2.1 核心四要素与驱动选择最基本的配置看起来是这样的spring: datasource: url: jdbc:mysql://localhost:3306/my_db?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: root password: your_strong_password driver-class-name: com.mysql.cj.jdbc.Driver1. URL连接字符串的学问url远不止是地址和端口。以MySQL为例后面的参数?之后至关重要useUnicodetruecharacterEncodingutf-8确保正确处理中文等非ASCII字符这是解决乱码问题的第一步。useSSLfalse在本地开发或内网测试环境可以关闭SSL以简化配置。但在生产环境强烈建议启用SSLuseSSLtrue并配置信任证书以保证数据传输安全。serverTimezoneAsia/Shanghai指定服务器时区。如果不设置当数据库服务器时区与应用服务器不一致时可能导致时间字段读写出现令人困惑的偏差。这是Java 8及以上版本使用MySQL Connector/J驱动后的常见问题。注意对于Oracle数据库URL格式通常为jdbc:oracle:thin://host:port/service_name或jdbc:oracle:thin:host:port:sid。安装和配置Oracle时务必确认使用的是服务名Service Name还是SID这直接影响连接字符串的写法。2. driver-class-name驱动的显式声明虽然Spring Boot能根据URL自动推断大部分数据库的驱动类但我强烈建议显式声明。原因有二一是避免因依赖冲突或版本问题导致自动推断失败二是代码意图更清晰。对于MySQL通常使用com.mysql.cj.jdbc.Driver新的Connector/J驱动而不是旧的com.mysql.jdbc.Driver。3. username password安全之道永远不要将明文密码提交到版本控制系统如Git。正确的做法是使用环境变量或配置中心。在application.yml中可以这样写spring: datasource: username: ${DB_USERNAME:root} password: ${DB_PASSWORD:}这里${DB_USERNAME:root}表示优先从环境变量DB_USERNAME中读取值如果不存在则使用默认值root。生产环境的密码应通过CI/CD流程或运维平台注入环境变量。2.2 连接池高性能的幕后功臣Spring Boot 2.x默认使用HikariCP作为数据源连接池这是因为它性能卓越且稳定。但“默认”不意味着“最优”我们需要根据实际流量调整其参数。spring: datasource: hikari: # 连接池名称便于监控 pool-name: MyAppHikariPool # 最小空闲连接数 minimum-idle: 5 # 最大连接数这是最重要的参数之一 maximum-pool-size: 20 # 连接最大存活时间毫秒防止长时间空闲连接 max-lifetime: 1800000 # 30分钟 # 连接空闲超时时间毫秒 idle-timeout: 600000 # 10分钟 # 连接超时时间毫秒 connection-timeout: 30000 # 30秒 # 测试连接有效性的SQL connection-test-query: SELECT 1关键参数解读与调优建议maximum-pool-size不要盲目设置过大这个值应该基于数据库服务器的最大连接承受能力和应用的实际并发需求来设定。一个经验公式是应用实例数 * maximum-pool-size 数据库max_connections * 0.8。设置过大会压垮数据库过小则会导致应用获取连接等待。对于常规Web应用从10-20开始监控调整是稳妥的。minimum-idle维持的最小空闲连接数。对于流量波动大的应用可以设置得比maximum-pool-size小一些以节省资源。如果应用流量一直很平稳可以设置为与maximum-pool-size相同。max-lifetime和idle-timeout这两个参数有助于清理“老化”或长时间空闲的连接避免网络抖动或数据库重启导致的僵死连接。通常max-lifetime应略大于数据库侧的wait_timeout设置。connection-test-query对于不支持Connection.isValid()方法的较旧数据库驱动需要配置一个简单的查询如SELECT 1来在连接被取出池时进行有效性检查。MySQL Connector/J较新版本通常不需要。实操心得调整连接池参数后务必通过监控工具如Spring Boot Actuator的/actuator/metrics/hikari.connections端点或连接池自身的JMX观察连接数、使用率、等待时间等指标进行持续调优。3. 高级场景与实战配置当项目从单机开发步入集群部署或需要对接多个数据库时基础配置就不够用了。3.1 多环境配置隔离开发、测试、生产环境的数据源配置必然不同。Spring Boot的Profile机制是解决此问题的标准方案。# application.yml (公共配置) spring: profiles: active: activatedProperties # 通常由启动命令或外部配置决定 --- # application-dev.yml (开发环境) spring: datasource: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_pass hikari: maximum-pool-size: 10 --- # application-prod.yml (生产环境) spring: datasource: url: jdbc:mysql://prod-db-cluster:3306/prod_db?useSSLtruerequireSSLtrue username: ${PROD_DB_USER} password: ${PROD_DB_PASS} hikari: maximum-pool-size: 50 connection-timeout: 10000通过spring.profiles.active指定激活的环境Spring Boot会自动加载对应配置文件application-{profile}.yml并覆盖公共配置。在打包时可以通过Maven或Gradle的profile来动态替换activatedProperties占位符或者更常见的做法是在服务器上通过环境变量SPRING_PROFILES_ACTIVEprod来指定。3.2 多数据源配置实战微服务架构下一个服务连接多个数据库如主业务库报表库的情况很常见。这需要手动配置多个DataSourceBean。步骤一排除自动配置手动定义首先在主配置类上排除数据源的自动配置避免冲突。SpringBootApplication(exclude {DataSourceAutoConfiguration.class}) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }步骤二在application.yml中定义两套配置使用自定义前缀区分。app: datasources: primary: url: jdbc:mysql://host1:3306/primary_db username: user1 password: pass1 driver-class-name: com.mysql.cj.jdbc.Driver secondary: url: jdbc:postgresql://host2:5432/secondary_db username: user2 password: pass2 driver-class-name: org.postgresql.Driver步骤三编写Java配置类创建两个DataSourceConfiguration public class DataSourceConfig { Bean(name primaryDataSource) ConfigurationProperties(prefix app.datasources.primary) Primary // 指定主数据源当注入时未指定Qualifier则使用这个 public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } Bean(name secondaryDataSource) ConfigurationProperties(prefix app.datasources.secondary) public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } // 如果需要还需要为每个数据源配置独立的JdbcTemplate、TransactionManager等 Bean public JdbcTemplate primaryJdbcTemplate(Qualifier(primaryDataSource) DataSource dataSource) { return new JdbcTemplate(dataSource); } Bean public JdbcTemplate secondaryJdbcTemplate(Qualifier(secondaryDataSource) DataSource dataSource) { return new JdbcTemplate(dataSource); } }步骤四在使用处通过Qualifier注入Repository public class MyRepository { private final JdbcTemplate primaryJdbcTemplate; private final JdbcTemplate secondaryJdbcTemplate; public MyRepository(Qualifier(primaryJdbcTemplate) JdbcTemplate primaryJdbcTemplate, Qualifier(secondaryJdbcTemplate) JdbcTemplate secondaryJdbcTemplate) { this.primaryJdbcTemplate primaryJdbcTemplate; this.secondaryJdbcTemplate secondaryJdbcTemplate; } // ... 使用对应的 jdbcTemplate 进行操作 }注意事项多数据源配置下事务管理变得复杂。你需要为每个数据源配置独立的PlatformTransactionManager并在使用Transactional注解时通过value或transactionManager属性指定使用哪个事务管理器否则事务可能不会按预期工作。3.3 特定数据库的配置要点不同数据库的驱动和特性需要在连接字符串或配置中特别关注。Oracle数据库 除了URL格式Oracle驱动ojdbc的版本与JDK版本有兼容性要求。另外Oracle连接池可能需要设置一些特定参数来优化性能例如oracle.jdbc.ReadTimeout。在Spring Boot中可以通过spring.datasource.hikari.data-source-properties来设置这些驱动原生属性。SQL Server与multipleActiveResultSets 这是网络热词中提到的一个关键点。multipleActiveResultSetstrue是Microsoft SQL Server JDBC驱动sqljdbc的一个连接属性。作用允许在同一个连接上同时打开多个ResultSet结果集。在某些特定编程模式如嵌套遍历结果集下如果不开启此选项会抛出“连接正忙”的异常。对数据库本身的影响这个参数主要影响客户端驱动层的行为它改变了驱动管理连接和语句的方式。它不会直接改变SQL Server数据库引擎的内部状态或配置。数据库本身对连接的管理如锁、事务隔离级别不受此参数影响。潜在风险与建议开启此功能可能会增加客户端的内存消耗因为需要同时维护多个结果集的状态。更重要的是它可能掩盖了一些本应通过优化查询如使用JOIN代替嵌套查询或正确管理连接/语句资源来解决的设计问题。我的建议是除非明确遇到“连接正忙”的错误且确认是嵌套结果集导致的否则不要默认开启。优先考虑重构代码逻辑。如果必须开启需密切关注应用的内存使用情况。# SQL Server 配置示例谨慎使用MARS spring: datasource: url: jdbc:sqlserver://localhost:1433;databaseNamemyDb;multipleActiveResultSetstrue username: sa password: your_password4. 连接问题排查与性能调优实录配置写好了应用跑起来了但数据库连接相关的问题总是层出不穷。下面是我总结的几个最常见的问题场景和排查思路。4.1 经典问题排查清单问题现象可能原因排查步骤与解决方案Communications link failure或连接超时1. 网络不通或防火墙拦截。2. 数据库服务未启动。3. 连接池connection-timeout设置过短。4. 数据库max_connections已满。1. 使用telnet或nc命令测试数据库端口连通性。2. 登录数据库服务器检查服务状态。3. 适当增大connection-timeout如30秒。4. 登录数据库执行SHOW PROCESSLIST;(MySQL) 或SELECT count(*) FROM pg_stat_activity;(PgSQL)检查并清理空闲连接或调整数据库最大连接数。连接泄露Connection Leak应用代码中获取了Connection、Statement或ResultSet后未正确关闭。1.代码审查确保所有JDBC资源都在finally块中关闭或使用try-with-resources语句。2.监控Hikari启用Hikari的泄漏检测spring.datasource.hikari.leak-detection-threshold60000单位毫秒表示连接被借出超过此时长未归还则记录警告日志。3.使用监控工具通过Actuator或JMX查看“正在使用”的连接数是否持续增长且不下降。HikariPool-1 - Connection is not available1. 所有连接都在被使用且达到maximum-pool-size上限。2. 有连接泄露导致池中无可用连接。3. 业务存在慢查询连接被长时间占用。1. 首先检查是否是连接泄露见上一条。2.分析业务逻辑是否存在耗时极长的数据库操作如大数据量导出、复杂报表查询考虑将其移至异步任务或专用分析库。3.临时缓解在明确瓶颈非泄露且业务必须的情况下可谨慎地、小幅地调高maximum-pool-size并同步调整数据库的max_connections。切忌盲目调大4. 优化慢查询为相关表添加索引。时区不一致导致时间错误应用服务器、数据库服务器、连接字符串三者的时区设置不一致。1. 在JDBC URL中强制指定时区如MySQL的serverTimezoneAsia/Shanghai。2. 确保应用服务器JVM的默认时区与数据库时区一致可以在启动命令中添加-Duser.timezoneGMT08:00。3. 在代码中对于时间字段考虑使用java.time.InstantUTC时间进行存储和传输在前端展示时再转换为本地时间。4.2 性能监控与调优实践“没有监控就没有优化。” 对于数据库连接我们必须建立有效的监控。1. 启用Spring Boot Actuator监控在pom.xml中添加依赖并在application.yml中暴露相关端点。management: endpoints: web: exposure: include: health,metrics,info,prometheus metrics: export: prometheus: enabled: true访问/actuator/metrics/hikari.connections可以获取连接池的详细指标如active活跃连接数、idle空闲连接数、awaiting等待连接数等。将这些指标接入PrometheusGrafana可以绘制出直观的趋势图。2. 关键指标解读活跃连接数 (active) 持续接近最大连接数 (max): 说明连接池大小可能不足或存在慢查询/连接泄露。等待连接数 (awaiting) 持续大于0: 说明应用线程经常需要等待获取连接是性能瓶颈的明确信号需要立即调查原因是池大小不够还是连接被长时间占用。连接创建时间 (creation) 过长: 可能表示数据库服务器负载高或网络延迟大。3. 基于监控的调优循环我的习惯是上线初期设置一个保守的maximum-pool-size如10然后观察监控图表。在业务高峰期如果active连接数稳定在8-9且awaiting偶尔出现我会考虑将池大小增加到15。增加后继续观察确保数据库服务器能承受新增的连接数。这是一个持续的、数据驱动的过程而不是一劳永逸的设置。5. 安全加固与配置管理最佳实践最后我们来谈谈安全和维护性。一个写在配置文件里的数据库密码可能是整个系统最大的安全漏洞。5.1 敏感信息加密与脱敏绝对禁止将明文密码提交到代码仓库。除了之前提到的使用环境变量对于更复杂的环境可以考虑Jasypt集成使用Jasypt库对配置文件中的密文进行加密在应用启动时通过密钥解密。spring: datasource: password: ENC(加密后的密文字符串)启动时需传入密钥java -jar -Djasypt.encryptor.passwordyour_master_password app.jar。使用配置中心如Spring Cloud Config、Apollo、Nacos等。将配置包括加密的数据库密码集中存储在配置中心应用启动时拉取并解密。这是微服务架构下的标准做法。5.2 配置的版本化与审计application.yml本身也应该被纳入版本控制Git但其中包含的敏感值需用占位符替代。我们可以维护一个application.yml.template模板文件提交到仓库里面包含所有配置项的结构和说明但敏感值为空或示例值。实际的、包含真实值的配置文件如application-prod.yml由运维人员通过安全的渠道如配置中心、受保护的服务器目录进行管理。任何对生产环境配置的修改都必须有严格的审批和变更记录。我个人在实际操作中的体会是数据库配置这项看似基础的工作实际上是系统稳定性的基石。它连接着应用和数据的命脉。很多棘手的性能问题、偶发的故障追根溯源往往都能在连接池配置或连接管理上找到原因。花时间理解每一个参数的含义建立有效的监控形成基于数据的调优习惯这些投入在项目长期运行中会带来远超预期的回报。记住没有“放之四海而皆准”的最优配置只有最适合你当前业务流量和基础设施的配置。持续观察谨慎调整是做好这项工作的不二法门。

相关新闻

3分钟上手BilibiliDown:B站视频批量下载与离线观看完整攻略

3分钟上手BilibiliDown:B站视频批量下载与离线观看完整攻略

3分钟上手BilibiliDown:B站视频批量下载与离线观看完整攻略 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirr…

2026/8/15 1:38:57 阅读更多 →
自动化脚本中如何启动脚本,暂停脚本和停止脚本

自动化脚本中如何启动脚本,暂停脚本和停止脚本

在自动化脚本的开发和运维过程中,脚本的生命周期管理是至关重要的基础能力。无论是调试阶段的反复验证,还是生产环境中的任务调度,开发者都需要对脚本的启动、暂停和停止拥有精确的控制力。本文将系统性地梳理这三种操作的具体实现方式、适用…

2026/8/15 1:37:57 阅读更多 →
【计算机毕业设计单片机案例】基于 STM32 单片机的阈值自定义心率血氧预警装置 基于 STM32 的 MAX30102 信号处理与无线 APP 控制系统(013203)

【计算机毕业设计单片机案例】基于 STM32 单片机的阈值自定义心率血氧预警装置 基于 STM32 的 MAX30102 信号处理与无线 APP 控制系统(013203)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/15 1:37:57 阅读更多 →

最新新闻

Django项目搭建全攻略:从虚拟环境到Admin后台的完整实践

Django项目搭建全攻略:从虚拟环境到Admin后台的完整实践

1. 从“Hello, World!”到“Hello, Django!”:为什么你的第一个Django项目总在环境上卡壳? 如果你刚学Python,或者已经用Flask写过几个小玩意儿,现在想试试更“重量级”的Django,大概率会在一开始就遇到一堆环境问题。…

2026/8/15 2:08:06 阅读更多 →
【单片机毕设案例分享】基于 STM32 或 51 单片机的声光提示智能感应门与人流监测系统 基于 STM32 或 51 单片机的蓝牙数据传输智能门控平台设计(012403)

【单片机毕设案例分享】基于 STM32 或 51 单片机的声光提示智能感应门与人流监测系统 基于 STM32 或 51 单片机的蓝牙数据传输智能门控平台设计(012403)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…

2026/8/15 2:08:06 阅读更多 →
顶级GPU千兆算力为何在LLM生成时几乎闲置?从内存带宽重建推理直觉

顶级GPU千兆算力为何在LLM生成时几乎闲置?从内存带宽重建推理直觉

租一台数据中心级GPU,规格书写着接近每秒千兆次算术运算。把70B参数模型装上去,启动生成,监控面板利用率飙到高位,一切看起来健康。可真正数token时,每秒只有几十个。芯片明明能做那么多运算,几乎全在空转。…

2026/8/15 2:08:06 阅读更多 →
Context包:取消、超时与值传递

Context包:取消、超时与值传递

第26篇 Context包,取消、超时与值传递 摘要:Context是Go并发控制的核心组件,负责取消信号传播、超时控制和请求作用域值传递。本文从一次雪崩故障说起,讲透Context的四种派生方式和常见误用。 一次请求雪崩 去年双十一压测&#…

2026/8/15 2:08:06 阅读更多 →
游戏测试用例设计实战:从核心思路到不同类型系统的编写与管理

游戏测试用例设计实战:从核心思路到不同类型系统的编写与管理

1. 项目概述:从“点点点”到“有章法”的蜕变刚入行做游戏测试那会儿,我最常听到的指令就是“去跑一下这个功能”,或者更直接的“去点点看有没有问题”。那时候的测试,很大程度上依赖于测试人员的个人经验、直觉和“暴力点击”。一…

2026/8/15 2:08:06 阅读更多 →
从Claude Opus 5提示词泄露,看企业级AI应用的系统提示工程与安全设计

从Claude Opus 5提示词泄露,看企业级AI应用的系统提示工程与安全设计

1. 从一则“泄露”事件说起:我们到底在围观什么?这两天,AI圈子里一个消息传得沸沸扬扬:Claude Opus 5的系统提示词(System Prompt)被“完整泄露”了。这个文件据说有135,027个字符,大约3.4万个t…

2026/8/15 2:07:06 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →