Spring Cloud 微服务环境搭建与工程初始化
开发环境准备
JDK 版本选择
Oracle 从 JDK 9 开始每半年发布一个新版本,老版本发布后不再维护,但会有几个长期支持(LTS)版本。目前 LTS 版本包括 JDK 8、11、17 和 21。
在 Spring Cloud 开发中,建议优先选择 LTS 版本。特别是 Spring Boot 3.x 版本,其基线要求为 JDK 17。因此,本教程统一使用 JDK 17。
案例设计与服务拆分
业务需求
为了演示微服务架构,我们构建一个简单的电商场景。虽然真实电商平台功能复杂,但核心逻辑可以简化为:订单列表展示需要包含订单信息和对应的商品详情。
如果将所有功能耦合在一个服务中,随着业务增长,单体应用将变得难以维护。微服务架构通过服务拆分,让各个模块独立开发、部署和扩展。
拆分原则
微服务并非越小越好,需要在独立性和管理成本之间找到平衡。拆分时通常遵循以下原则:
- 单一职责:每个微服务只负责一个特定的业务领域,边界清晰。
- 服务自治:服务具备独立开发、测试、构建、部署和运行的能力,拥有独立的数据库和配置。
- 单向依赖:服务间避免循环依赖或双向依赖,保持调用链路的清晰。
基于此,我们将系统拆分为两个核心服务:
- 订单服务:负责订单 ID 及订单详细信息的管理。
- 商品服务:根据商品 ID 返回商品详细信息。
数据准备
遵循服务自治原则,每个服务应拥有独立的数据库。
订单服务数据库
-- 建库
create database if not exists cloud_order charset utf8mb4;
-- 订单表
DROP TABLE IF EXISTS order_detail;
CREATE TABLE order_detail (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '订单 id',
`user_id` BIGINT (20) NOT NULL COMMENT '用户 ID',
`product_id` BIGINT (20) NULL COMMENT '产品 id',
`num` INT (10) NULL DEFAULT 0 COMMENT '下单数量',
`price` () COMMENT ,
`delete_flag` TINYINT () ,
`create_time` DATETIME now(),
`update_time` DATETIME now(),
(`id`)
) ENGINE INNODB utf8mb4 COMMENT ;
order_detail (user_id, product_id, num, price)
(, , , ),
(, , , ),
(, , , ),
(, , , ),
(, , , ),
(, , , );


