Spring Cloud Nacos配置中心实战:bootstrap.yml多环境配置与动态刷新
1. 项目概述与核心痛点最近在重构一个老项目的微服务架构准备从传统的Spring Boot单体应用向Spring Cloud Alibaba体系迁移。在配置管理这块我们遇到了一个非常典型的问题如何优雅地管理不同环境开发、测试、预生产、生产的配置文件。之前的方式是把各种环境的配置都打包在应用的application.yml里通过spring.profiles.active来切换但这导致配置文件臃肿且每次发版都要重新打包风险极高。我们决定引入Nacos作为配置中心实现配置的集中管理和动态刷新。然而在整合过程中尤其是在使用bootstrap.yml进行多环境配置初始化时踩了不少坑。比如如何让服务在启动时就能根据环境从Nacos拉取正确的配置bootstrap.yml和application.yml的加载顺序和优先级是怎样的不同环境下的Nacos地址、命名空间、分组如何隔离这些问题如果不搞清楚轻则服务启动失败重则配置错乱引发线上事故。这篇文章我就结合这次实战把Spring Cloud整合Nacos配置中心并通过bootstrap.yml实现多环境配置的完整方案、核心原理和避坑经验给你一次性讲透。2. 技术选型与架构设计思路2.1 为什么是Nacos Spring Cloud bootstrap.yml在微服务配置中心的选择上我们对比了Spring Cloud Config、Apollo和Nacos。Spring Cloud Config功能相对单一需要配合Git和消息总线架构稍重。Apollo功能强大但部署和运维成本较高。Nacos则是一个集服务发现、配置管理于一体的平台对于已经决定使用Spring Cloud Alibaba生态的团队来说集成更平滑学习成本和运维成本都更低。它支持配置的持久化、版本管理、灰度发布和监听推送完全能满足我们的需求。而bootstrap.yml或bootstrap.properties是Spring Cloud上下文bootstrap context的配置文件。这个上下文是主应用上下文application context的父上下文。它的核心作用就是在应用主配置加载之前去外部源如配置中心加载配置信息。这对于配置中心场景至关重要因为很多核心配置如Nacos服务器地址、应用名、环境信息必须在应用启动的最早期确定然后才能根据这些信息去拉取更多的业务配置。如果把这些配置放在application.yml里就太晚了。我们的多环境配置设计思路是环境隔离在Nacos启动引导在bootstrap.yml。具体来说Nacos侧使用命名空间Namespace来严格隔离不同环境如dev,test,prod。每个命名空间下再用分组Group对配置进行逻辑分类如DEFAULT_GROUP,MY_APP_GROUP。应用侧在bootstrap.yml中通过一个环境变量如spring.profiles.active或启动参数来动态决定当前应用启动时应该去连接Nacos的哪个命名空间从而拉取对应环境的配置。配置内容公共配置如日志格式、线程池参数放在Nacos的公共配置Data ID中被所有环境共享。环境特有配置如数据库地址、Redis地址、第三方API密钥放在各自命名空间下的环境专属Data ID中。这样设计的好处是同一份应用代码和镜像只需要在启动时注入不同的环境标识就能自动适配不同环境实现了真正的“一次构建到处运行”。2.2 核心依赖与版本对齐版本兼容性是Spring Cloud Alibaba项目的一大“暗坑”。各组件版本必须严格匹配否则会出现各种奇怪的ClassNotFoundException或配置不生效的问题。我们项目基于Spring Boot 2.7.x对应的选择如下!-- 父POM中定义依赖管理 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.7.18/version /parent dependencyManagement dependencies !-- Spring Cloud Alibaba 依赖管理 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version2021.0.8.0/version !-- 与 Spring Boot 2.7.x 对应 -- typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement !-- 子模块中引入具体依赖 -- dependencies !-- Nacos 配置中心客户端 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId /dependency !-- Nacos 服务发现客户端 (如果也需要服务发现) -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency !-- Spring Cloud Bootstrap 上下文支持 (Spring Boot 2.4 后需要显式引入) -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-bootstrap/artifactId /dependency /dependencies注意从Spring Boot 2.4版本开始bootstrap.yml的自动加载功能被移除了需要显式引入spring-cloud-starter-bootstrap依赖。这是最容易忽略的一点很多同学发现bootstrap.yml不生效问题就出在这里。3. 多环境配置的Nacos侧实操3.1 规划Nacos中的配置结构登录Nacos控制台默认地址http://localhost:8848/nacos我们开始进行配置规划。清晰的命名规范是后续维护的基础。创建命名空间Namespacedev开发环境。ID可以设置为dev名称“开发环境”。test测试环境。ID设置为test名称“测试环境”。prod生产环境。ID设置为prod名称“生产环境”。可选uat预发布环境。命名空间ID是我们在bootstrap.yml中配置spring.cloud.nacos.config.namespace的值。它通常是一个字符串形式的IDNacos生成的或自定义的而不是名称。确定Data ID和Group的命名规则Data ID${spring.application.name}-${spring.profiles.active}.${file-extension}例如user-service-dev.yamlorder-service-prod.properties。这是一种通用且清晰的模式通过Data ID本身就能看出是哪个服务、哪个环境的配置。Group默认为DEFAULT_GROUP。如果项目复杂可以按业务线或项目分组如MALL_GROUP、ERP_GROUP。我们这里先使用默认组。创建配置在dev命名空间下创建一个Data ID为my-application-dev.yaml的配置。配置格式选择YAML更推荐支持层次结构。配置内容填入开发环境的特有配置例如server: port: 8081 # 开发环境用8081端口 spring: datasource: url: jdbc:mysql://dev-db-host:3306/my_db?useSSLfalsecharacterEncodingutf8 username: dev_user password: dev_password_123 custom: api: endpoint: https://api-dev.example.com key: dev-key-abc同理在test和prod命名空间下分别创建my-application-test.yaml和my-application-prod.yaml并填写对应环境的数据库地址、密码、API端点等。创建共享配置可选但推荐我们可以在dev命名空间下再创建一个Data ID为my-application-shared.yaml的配置。里面放置所有环境通用的配置比如logging: level: com.example: DEBUG org.springframework: WARN management: endpoints: web: exposure: include: health,info,metrics这样dev环境的最终配置就是my-application-shared.yaml和my-application-dev.yaml的合并。3.2 配置的优先级与覆盖关系理解配置的加载顺序和优先级是解决配置冲突的关键。Spring Cloud应用从Nacos加载配置的顺序如下从低优先级到高优先级Nacos 共享配置(spring.cloud.nacos.config.shared-configs): 最先加载优先级最低。Nacos 扩展配置(spring.cloud.nacos.config.extension-configs): 其次加载。基于spring.profiles.active的配置(即${spring.application.name}-${profile}.${extension}): 然后加载。Nacos 默认配置(即${spring.application.name}.${extension}不包含profile): 接着加载。应用本地的application-{profile}.yml: 再然后加载。应用本地的application.yml: 最后加载优先级最高。核心原则后加载的配置会覆盖先加载的相同属性。因此高优先级的配置如本地application.yml可以覆盖从Nacos拉取的低优先级配置。这为我们提供了灵活性可以将一些极其敏感或本地调试专用的配置放在本地文件覆盖远程配置。4. bootstrap.yml 的详细配置与解析接下来是重头戏编写bootstrap.yml。这个文件是连接应用和Nacos配置中心的桥梁。4.1 基础连接配置首先配置Nacos服务器地址和应用基础信息。这部分配置是无状态的理论上所有环境可以共用如果Nacos地址不同则需区分。# bootstrap.yml spring: application: name: my-application # 应用名用于构成Nacos中的Data ID cloud: nacos: config: server-addr: ${NACOS_HOST:localhost}:${NACOS_PORT:8848} # 支持环境变量覆盖 username: ${NACOS_USERNAME:nacos} # 如果Nacos有认证 password: ${NACOS_PASSWORD:nacos} file-extension: yaml # 配置格式与Nacos中创建的格式一致 group: DEFAULT_GROUP # 配置分组与Nacos中一致 # 命名空间这是多环境的关键我们通过环境变量动态注入 namespace: ${NACOS_NAMESPACE:dev} # 启用配置刷新 refresh-enabled: true关键点解析server-addr: 这里使用了环境变量NACOS_HOST和NACOS_PORT并提供了默认值。这样在Docker或K8s部署时可以通过容器环境变量轻松指定Nacos集群地址无需修改配置文件。namespace:这是实现多环境隔离的核心配置项。它的值${NACOS_NAMESPACE:dev}意味着优先使用环境变量NACOS_NAMESPACE的值如果不存在则使用默认值dev。我们只需要在启动命令中传入-DNACOS_NAMESPACEprod应用就会自动去prod命名空间拉取配置。4.2 多环境配置的几种实现方式如何将环境信息如prod传递给bootstrap.yml中的namespace和构成Data ID的spring.profiles.active有以下几种常用方式方式一通过启动命令参数最常用尤其适合CI/CDjava -jar my-application.jar \ --spring.profiles.activeprod \ --spring.cloud.nacos.config.namespaceprod \ --NACOS_NAMESPACEprod在CI/CD流水线中这些参数可以由部署脚本根据目标环境动态拼接。方式二通过系统环境变量在服务器或容器中设置环境变量export SPRING_PROFILES_ACTIVEprod export NACOS_NAMESPACEprod然后在bootstrap.yml中引用spring: profiles: active: ${SPRING_PROFILES_ACTIVE:dev} # 默认dev cloud: nacos: config: namespace: ${NACOS_NAMESPACE:${spring.profiles.active}} # 可以用其他属性引用这种方式与容器化部署Docker, K8s的理念非常契合。方式三使用多个bootstrap-{profile}.yml文件不推荐创建bootstrap-dev.yml,bootstrap-prod.yml在里面写死各自的namespace。这种方式违背了“一份配置多环境适配”的原则增加了维护成本容易出错。我们的选择方式一和方式二结合。在bootstrap.yml中使用环境变量作为配置源在启动时通过命令行参数或容器环境变量注入具体值。这样最灵活也最符合云原生实践。4.3 高级配置共享配置与扩展配置如果你的配置项很多或者希望将某些配置如Redis、Sentinel规则抽离成独立文件以便多个服务共享可以使用shared-configs和extension-configs。spring: cloud: nacos: config: # 1. 共享配置列表 (低优先级) shared-configs: ->import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; Component RefreshScope // 关键注解标记这个Bean的作用域是可刷新的 public class ApiConfig { Value(${custom.api.endpoint}) private String apiEndpoint; Value(${custom.api.key}) private String apiKey; public String getApiInfo() { return Endpoint: apiEndpoint , Key: apiKey; } // 当Nacos中custom.api.endpoint或custom.api.key变更后 // 下次调用getApiInfo()方法时会得到新的值。 }第二步在Nacos控制台修改配置并发布例如将custom.api.endpoint从https://api-dev.example.com改为https://api-test.example.com然后点击发布。第三步观察日志与验证发布后你的应用控制台会看到类似日志2023-10-27 10:00:00.000 INFO [com.alibaba.nacos.client.Worker.longPolling.fixed-localhost_8848] ... Refresh keys changed: [custom.api.endpoint]这表示配置已刷新。此时所有被RefreshScope注解标记的Bean其中通过Value注入的、且发生变更的配置项会被重新注入。但要注意Bean的重新初始化是懒加载的即下次请求该Bean的方法时才会触发。重要避坑点RefreshScopevsConfigurationProperties对于绑定到类的配置使用ConfigurationProperties并配合RefreshScope也能刷新但更优雅的方式是在类上使用RefreshScope或者确保其所在的Configuration类被RefreshScope代理。另一种方式是直接使用ConfigurationPropertiesSpring Cloud默认会为这些属性创建RefreshScope但为了保险显式加上RefreshScope也没问题。静态字段无法刷新Value不能注入到static字段上即使注入成功也无法刷新。复杂Bean的刷新可能导致状态不一致对于内部持有状态、或者初始化成本很高的Bean如数据库连接池要谨慎使用RefreshScope。刷新会导致旧Bean被销毁新Bean被创建可能会中断正在进行的业务。对于数据源、线程池等通常建议重启应用。7. 常见问题排查与实战技巧在实际整合过程中我遇到了不少问题这里总结成排查清单希望能帮你快速定位。7.1 问题排查清单问题现象可能原因排查步骤与解决方案启动报错No spring.config.import property has been definedSpring Boot 2.4 未引入spring-cloud-starter-bootstrap依赖。1. 检查pom.xml确保已添加spring-cloud-starter-bootstrap依赖。2. 确保Spring Cloud版本与Spring Boot版本兼容。启动报错Connection refused或unknown hostNacos服务器地址配置错误或Nacos服务未启动。1. 检查bootstrap.yml中的spring.cloud.nacos.config.server-addr。2. 使用telnet或curl命令测试Nacos地址端口是否通畅。3. 确认Nacos服务健康状态。启动成功但无法读取Nacos中的配置Value注入为null1. Data ID、Group、Namespace不匹配。2. 配置格式(file-extension)不匹配。3. 配置内容有语法错误如YAML缩进。1.核对四要素应用名(spring.application.name)、激活的profile(spring.profiles.active)、命名空间(namespace)、分组(group)是否与Nacos控制台完全一致。命名空间要填ID不是名称2. 检查file-extension是yaml还是yml需与Nacos中创建时选择的格式一致。3. 在Nacos控制台检查配置内容复制到在线YAML校验工具检查语法。配置变更后RefreshScopeBean不刷新1. Bean未加RefreshScope注解。2. 配置项不在该Bean的刷新范围内如静态字段。3. Nacos监听器异常。1. 确认Bean类或配置类上有RefreshScope。2. 检查控制台日志看是否有Refresh keys changed提示。如果没有可能是Nacos没推送或客户端没订阅成功。3. 在Nacos控制台查看配置的“监听查询”确认你的应用实例是否在监听列表中。不同环境配置互相干扰bootstrap.yml中的namespace没有根据环境动态变化写死了。1. 确保namespace配置使用了环境变量或启动参数如namespace: ${NACOS_NAMESPACE}。2. 在启动脚本或容器编排文件中为不同环境设置不同的NACOS_NAMESPACE值。本地配置无法覆盖远程配置不理解配置优先级。记住本地application.yml优先级最高。如果你想用本地配置覆盖Nacos配置直接写在application.yml里即可。如果想禁用某个远程配置可以在application.yml中使用spring.cloud.nacos.config.extension-configs[0].data-id:置空来覆盖。7.2 实战技巧与心得命名空间ID使用UUID在Nacos控制台创建命名空间时系统会生成一个唯一的UUID作为ID。强烈建议直接使用这个UUID作为namespace的配置值而不是使用自定义的字符串ID如dev。因为UUID是全局唯一的可以避免在复杂部署环境下因手动输入导致的命名冲突。将namespace: dev改为namespace: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee你的实际UUID。善用“配置导出/导入”功能在Nacos控制台可以将一个命名空间下的所有配置导出为压缩包然后导入到另一个命名空间。这在初始化新环境时非常方便。但要注意导入后务必仔细检查各个环境的差异化配置如数据库密码是否已正确修改。敏感配置加密Nacos配置中心本身不提供强加密功能。对于数据库密码、API密钥等敏感信息有几种处理方案方案A推荐使用jasypt-spring-boot等库在客户端进行加解密。将加密后的密文存放在Nacos中应用启动时用预设的密钥解密。密钥本身通过更安全的方式如K8s Secret、启动参数传递。方案B使用云服务商提供的密钥管理服务如KMSNacos中只存一个密钥标识或密文应用通过SDK去KMS解密。绝对避免将明文密码直接提交到代码仓库或写在无保护的配置中心。本地开发调试配置在本地开发时可能不想连接远程Nacos。可以在src/main/resources/下放置一个bootstrap-local.yml里面配置spring.cloud.nacos.config.enabled: false来完全禁用Nacos配置并直接在application-local.yml中写全所有配置。通过--spring.profiles.activelocal激活。这样既能享受配置中心的便利也不影响本地断网开发。配置版本备份与回滚Nacos天然支持配置的版本历史和回滚。在每次重要变更发布前可以手动在Nacos控制台点击“克隆”当前配置生成一个备份版本。一旦新配置有问题可以快速回滚到历史版本这是配置中心相比传统配置文件方式的巨大优势。整合Spring Cloud、Nacos配置中心与bootstrap.yml进行多环境管理看似是简单的配置堆砌实则涉及到Spring Boot启动流程、配置优先级、环境隔离、安全等多个层面的考量。把每个环节的原理和细节理清才能构建出健壮、可维护的微服务配置体系。这套方案在我们多个项目中稳定运行真正实现了配置的“一次定义多处运行一处修改实时生效”。

相关新闻

终极免费macOS炉石传说智能套牌追踪器:5分钟快速上手完整指南

终极免费macOS炉石传说智能套牌追踪器:5分钟快速上手完整指南

终极免费macOS炉石传说智能套牌追踪器:5分钟快速上手完整指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 在炉石传说这款策略卡牌游戏中,信息…

2026/10/16 16:55:08 阅读更多 →
Linux系统下Vivado安装部署全攻略:从环境配置到工程实践

Linux系统下Vivado安装部署全攻略:从环境配置到工程实践

1. 项目概述:为什么在Linux上部署Vivado是硬件工程师的“必修课”如果你是一名FPGA开发者,或者正在踏入数字电路设计的领域,那么Vivado这个名字对你来说一定不陌生。作为业界主流的FPGA开发套件,它集成了从设计输入、综合、实现到…

2026/10/16 21:11:45 阅读更多 →
Android蓝牙调试全攻略:从HCI日志到内核驱动的深度问题定位

Android蓝牙调试全攻略:从HCI日志到内核驱动的深度问题定位

1. 项目概述:为什么我们需要开启Android蓝牙日志?在Android应用开发,特别是涉及蓝牙功能调试时,最让人头疼的莫过于那些“薛定谔”的Bug——在开发者的设备上运行得好好的,一到测试或用户手里就出现连接失败、数据传输…

2026/10/13 2:27:49 阅读更多 →

最新新闻

深入解析DNS存根解析器与权威域服务器:从原理到排错实战

深入解析DNS存根解析器与权威域服务器:从原理到排错实战

1. 从一个被忽略的解析环节说起很多人第一次接触DNS,都是从“域名怎么变成IP”这个问题开始的。查资料、看教程,翻来覆去就是递归查询、迭代查询、根域名服务器、顶级域名服务器、权威域名服务器这一套流程。画个图,背下来,考试能…

2026/10/17 15:03:41 阅读更多 →
C++ libcurl实战:静态链接、断点续传与multipart上传全链路解析

C++ libcurl实战:静态链接、断点续传与multipart上传全链路解析

简介:本资源是一份面向C中高级开发者的技术实践包,聚焦于使用libcurl库实现HTTP协议下的文件上传与下载功能,并配套Node.js服务端用于端到端验证,解决跨平台网络通信开发中的核心集成问题。压缩包共872个文件,涵盖227个…

2026/10/17 15:03:41 阅读更多 →
VS Code Git可视化操作:新手从提交到分支协作完整指南

VS Code Git可视化操作:新手从提交到分支协作完整指南

坦白讲,每次有同事或者新手朋友跑过来问我:Git 到底怎么学?我都建议他们别一上来就啃命令行,先在 VS Code 里把 Git 玩明白。VS Code 内置的 Git 能力已经相当完整,而且把所有关键操作都做成了可视化的按钮、面板和提示…

2026/10/17 15:03:41 阅读更多 →
TLS 1.3配置审计、证书锁定绕过与中间人攻击模拟实战

TLS 1.3配置审计、证书锁定绕过与中间人攻击模拟实战

做安全这块的同行应该都有同感:TLS 1.3 铺开之后,很多以前靠"看版本号、查证书有效期"就能过关的检查项突然就不够用了。我最近在给一个内部业务系统做数据传输安全评估时,就遇到过这样的场景——服务器明明只开了 TLS 1.2 和 1.3&…

2026/10/17 15:03:41 阅读更多 →
Docker镜像批量拉取与自动重打标签:私有仓库同步脚本实战

Docker镜像批量拉取与自动重打标签:私有仓库同步脚本实战

拉取镜像自动重打标签,这个需求在部署和交付场景里出现频率比想象中高得多。我自己整理部署环境基础镜像的时候,面对几十个待同步的镜像,最头疼的不是 docker pull,而是手动敲 docker tag 那一串又长又容易出错的标签命令。版本号…

2026/10/17 15:03:41 阅读更多 →
Muse-Glimmer-30B-mxfp8 chat_template 详解:正确书写 System Prompt 与多轮图像对话的完整方法

Muse-Glimmer-30B-mxfp8 chat_template 详解:正确书写 System Prompt 与多轮图像对话的完整方法

【免费下载链接】Muse-Glimmer-30B-mxfp8 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Muse-Glimmer-30B-mxfp8 点击查看 免费下载 Muse-Glimmer-30B-mxfp8 是一个 300 亿参数的多模态视觉语言模型(image-text-to-text)&…

2026/10/17 15:02:41 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →