一、开发环境准备
1.1 JDK 版本选择
Oracle 从 JDK 9 开始每半年发布新版本,老版本停止维护后会有几个长期支持(LTS)版本。目前 LTS 版本包括 JDK 8、11、17 和 21。考虑到 Spring Boot 3.x 版本的基线要求是 JDK 17,且 Spring Boot 3.x 以下版本官方已不再维护,本文统一采用 JDK 17。
1.2 案例背景与服务拆分
我们构建一个简化的电商系统作为演示。微服务架构的核心在于服务拆分,并非越小越好,而是要平衡独立性与管理成本。拆分通常遵循单一职责、服务自治和单向依赖原则。
以订单列表为例,它需要展示订单信息和商品信息。根据单一职责原则,我们将系统拆分为'订单服务'和'商品服务'。订单服务负责订单详情,商品服务负责商品详情。两者通过接口交互,避免循环依赖。
二、数据准备
基于服务自治原则,每个服务应拥有独立的数据库。以下是订单服务和商品服务的建库脚本及初始化数据。
-- 订单服务数据库
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 BIGINT(20) NOT NULL COMMENT '实付款',
delete_flag TINYINT(4) NULL DEFAULT 0,
create_time DATETIME now(),
update_time DATETIME now(),
(id)
) ENGINEINNODB utf8mb4 COMMENT;
order_detail(user_id,product_id,num,price)
(,,,),(,,,),(,,,),(,,,),(,,,),(,,,);
database if cloud_product charset utf8mb4;
IF product_detail;
product_detail (
id AUTO_INCREMENT COMMENT ,
product_name () COMMENT ,
product_price () COMMENT ,
state TINYINT() COMMENT ,
create_time DATETIME now(),
update_time DATETIME now(),
(id)
) ENGINEINNODB utf8mb4 COMMENT;
product_detail(id, product_name,product_price,state)
(,"T 恤",,),(,"短袖",,),(,"短裤",,),(,"卫衣",,),(,"马甲",,),(,"羽绒服",,),(,"冲锋衣",,),(,"袜子",,),(,"鞋子",,),(,"毛衣",,);


