JeecgBoot Nacos 完整实战指南:5分钟跑通微服务环境,搞懂每个配置去哪改
【免费下载链接】jeecg-boot【低代码v2.0,一句话即可生成整个系统】企业级AI低代码平台,一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖:AI聊天、知识库、流程编排、MCP插件等,兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并->AI修改」开发模式,解决 Java 项目 90% 重复工作,提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot
你的 JeecgBoot 项目要拆服务了:jeecg-system 和 jeecg-demo 拆成两个进程部署到不同机器,马上会撞上三个问题——前端请求到底打哪个地址?两个服务之间怎么互相找到对方?数据库连接这种几十个配置项,总不能每个服务里抄一份吧?JeecgBoot 用 Nacos 一次性解决这三件事:它既是注册中心(服务启动时把自己"挂号",别人按服务名找它),又是配置中心(公共配置集中存放、统一修改)。下面先花五分钟把环境跑起来,再逐个拆清楚每个配置住在哪里。
🚀 先看到效果:5分钟跑通最小环境
仓库里有一键脚本 start-docker-compose-cloud.sh(Windows 用同目录的 .bat),它会做四件事:装依赖检查、配置 hosts、mvn clean install -Pdev,SpringCloud编译后端、pnpm 构建前端,最后用 docker-compose-cloud.yml 拉起全部容器:
git clone https://gitcode.com/GitHub_Trending/je/jeecg-boot cd jeecg-boot && bash start-docker-compose-cloud.sh不想用脚本也可以手动来:
cd jeecg-boot/jeecg-server-cloud docker-compose up -d这份 compose 会按依赖顺序启动:MySQL 和 Redis → Nacos → jeecg-system、jeecg-demo → 网关。各端口先记下来:
| 组件 | 端口 | 说明 |
|---|---|---|
| Nacos | 8848 | 控制台在 http://localhost:8848/nacos,默认账号 nacos/nacos |
| 网关 jeecg-gateway | 9999 | 对外唯一入口,前端都打这里 |
| jeecg-system | 7001 | 系统服务,端口不对外暴露 |
| jeecg-demo | 7002 | 示例服务,端口不对外暴露 |
| MySQL | 13306 → 3306 | 初始化脚本在 jeecg-boot/db 下 |
等一两分钟后打开 Nacos 控制台,服务管理 → 服务列表里应该能看到 jeecg-system、jeecg-demo、jeecg-gateway 三个服务各有一个健康实例——这就是"注册"完成的证据。demo 服务跑起来的大屏效果长这样:
🧩 原理拆解:这套东西为什么这么设计
你只需要理解三件事,其余都是它们的推论。
1. 注册中心解决"找谁"。每个微服务启动时向 Nacos 上报"我叫 jeecg-system,在 7001 端口",实例掉了就自动摘除。网关配置里开了discovery.locator.enabled: true(见 jeecg-cloud-gateway 的 application.yml),意思是:按服务名就能自动路由,新增一个服务甚至不用改网关配置。
2. 配置中心解决"配置放哪"。服务本地只留最小配置,公共配置放进 Nacos。jeecg-system-cloud-start的 application.yml 里这段 import 就是"去哪取配置"的清单:
spring: config: import: - optional:classpath:config/application-liteflow.yml - optional:nacos:jeecg.yaml - optional:nacos:jeecg-@profile.name@.yamljeecg.yaml是所有服务共享的配置,jeecg-dev.yaml是 dev 环境专属(数据库、Redis 地址都在这里面,仓库里 docs/DEFAULT_GROUP/jeecg-dev.yaml 就是它的样例)。仓库自带的 jeecg-cloud-nacos 模块只是把官方 Nacos 打了个壳方便一键部署,它的 README 也说明:你完全可以换用自己搭的 Nacos,只要把对应的配置文件建出来。
3. 占位符解决"多环境切换"。你在 yml 里看到的@config.server-addr@、@config.group@、@config.namespace@不是配置值,是 Maven 占位符,打包时由 根 pom.xml 里的 profile 替换。dev默认激活,Nacos 地址被填成jeecg-boot-nacos:8848——这是容器名,Docker 网络内才能解析;test、docker、prod 各有一套值,切环境就是换 profile,不用动任何 yml。
⚙️ 跟着配置走:新增一个自己的服务要改哪三处
假设你要加一个 jeecg-report 服务,照着 demo 模块抄骨架即可:
第一步:建启动模块,写本地最小配置。照抄 jeecg-demo-cloud-start 的 pom(引jeecg-boot-starter-cloud+ 业务模块),application.yml 只写四块:
server: port: 7003 spring: application: name: jeecg-report # 注册到 Nacos 的服务名 cloud: nacos: config: server-addr: @config.server-addr@ group: @config.group@ namespace: @config.namespace@ discovery: server-addr: ${spring.cloud.nacos.config.server-addr} group: @config.group@ namespace: @config.namespace@第二步:注册不用你操心。只要 name 起好、能连上 Nacos,启动后控制台服务列表里自动出现它,网关的 discovery locator 也会自动能路由到它。
第三步:决定配置放哪层。原则是"公共的进 Nacos,私有的留本地":
| 配置放哪 | 放什么 |
|---|---|
| 本地 application.yml | 端口、服务名、Nacos 连接三件套(地址/分组/命名空间) |
| Nacos 的 jeecg.yaml | 所有服务通用的(文件上限、Jackson 日期格式等) |
| Nacos 的 jeecg-dev.yaml | 环境相关(数据源、Redis 地址) |
数据库这种环境相关的不要写进本地 yml,那是你以后切环境最疼的地方。
🔍 避坑:服务不出现或配置不生效,先查这四处
1. namespace 填的是显示名。Nacos 的命名空间参数必须填 ID(那串 UUID),填中文显示名会连到空命名空间,表现就是"配置死活不生效"。去控制台命名空间列表里复制 ID。
2. 占位符没被替换。如果启动日志里 Nacos 地址还是字面的@config.server-addr@,说明你没走 Maven profile 直接跑了 jar 或 IDE 里没激活 profile。本地跑用mvn spring-boot:run(会带默认 dev profile),或直接mvn -Pdev,SpringCloud打包。
3. 本地开发却用了容器地址。dev profile 的 Nacos 地址是jeecg-boot-nacos:8848(容器名)。你在宿主机直接起服务、Nacos 也装在本地时,要自己在 profile 里把config.server-addr改成127.0.0.1:8848,否则解析不到主机,服务起不来也注册不上。
4. 网关路由是空的。症状:Swagger 聚合文档是空的、前端调不到后台。原因是网关比 jeecg-system 先启动,动态路由还没加载到实例。官方 compose 里已经用启动前轮询 Nacos v3 接口、等 system 健康注册后再拉起网关的方式解决了(看 docker-compose-cloud.yml 里 jeecg-boot-gateway 的 command)。手动起服务时记住顺序:Nacos → system → 网关。
🏭 只有生产环境才要操心的事
- Nacos 集群。仓库自带的是单节点简化部署,生产上按 Nacos 官方文档做三节点集群,避免注册中心单点。
- 开启鉴权。根 pom 里有一段被注释的 profile 示例:填上
config.username/config.password(nacos 账号)后重新打包即可开启;仓库默认是免鉴权模式,生产必须开。 - 环境隔离。给 dev/test/prod 各建一个命名空间,对应各 profile 里填不同的
config.namespace(ID),同一套代码靠 profile 就能切换环境。 - 限流兜底。compose 里的 Sentinel 服务默认是注释状态,上量后打开它,流控、降级规则同样存在 Nacos(网关 yml 里已配好数据源指向)。
下一步往哪走
微服务环境跑通后,仓库里留了几个现成的试验田:jeecg-server-cloud/jeecg-visual/下的 jeecg-cloud-test-more 里有 Feign 服务间调用和熔断示例;jeecg-demo-cloud-start 的 pom 里注释着 RabbitMQ、Seata 分布式事务、ShardingSphere 分库分表三块示例依赖,取消注释就能跑。平台自身的 AI 模块(Airag)就部署在这套架构上:
建议先拿 demo 模块当沙盒:加一个 Feign 接口从 jeecg-demo 调 jeecg-system 的字典接口,把"服务名 → 注册中心 → 网关 → 目标实例"这条链路自己走一遍,微服务的账就算真正算明白了。
【免费下载链接】jeecg-boot【低代码v2.0,一句话即可生成整个系统】企业级AI低代码平台,一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖:AI聊天、知识库、流程编排、MCP插件等,兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并->AI修改」开发模式,解决 Java 项目 90% 重复工作,提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考