Spring Modulith 2.1 M4, 2.0.5, 1.4.10 正式发布
⚠️ 重要说明:由于Spring Modulith API变化较快,本文代码示例仅供参考。推荐使用 Spring Initializr 生成项目,添加Spring Modulith依赖。本文的配套示例项目仅包含骨架代码。
一、Spring Modulith 是什么?
Spring Modulith 是 Spring 官方推出的模块化架构框架,帮助开发者构建结构清晰、模块解耦的应用程序。
传统单体应用:
┌─────────────────────────────────────────┐
│ 业务代码堆在一起 │
│ UserService → OrderService → Payment │
│ ↓ ↓ ↓ │
│ 所有代码紧密耦合,难以维护 │
└─────────────────────────────────────────┘
Modulith模块化:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户模块 │ │ 订单模块 │ │ 支付模块 │
│ User │ │ Order │ │ Payment │
└──────────┘ └──────────┘ └──────────┘
↓ ↓ ↓
┌─────────────────────────────────────────┐
│ 事件驱动解耦 │
│ UserCreated → OrderCreated → ... │
└─────────────────────────────────────────┘
二、版本说明
| 版本 | 类型 | 适用场景 |
|---|---|---|
| 2.1 M4 | 里程碑版 | 尝鲜新特性 |
| 2.0.5 | 稳定版 | 生产环境推荐 |
| 1.4.10 | 维护版 | 旧项目维护 |
三、2.1 M4 新特性详解
3.1 Event Externalization(事件外部化)
新增JobRunr支持
// 之前:只支持Namastack
@ApplicationModule
public class OrderModule {
@Async
public void processOrder(Order order) {
// 异步处理订单
}
}
// 现在:也支持JobRunr
@ApplicationModule
public class OrderModule {
@Scheduled(cron = "0 0 * * * ?")
public void processScheduledJobs() {
// 定时任务处理
}
}
意义:JobRunr是一个分布式任务调度库,支持:
- 持久化任务存储
- 重试机制
- 分布式支持
3.2 自定义事件触发注解
// 现在可以自定义触发注解
@Retention(RetentionPolicy.RUNTIME)
@TriggerEvent
public @interface MyCustomEvent {
String value() default "";
}
// 使用自定义注解
@MyCustomEvent("order-created")
public class OrderCreatedEvent {
private final Order order;
}
3.3 AOT优化
// MomentsJacksonModule改进
// 更好地支持Java记录类型和时间API
public record OrderEvent(
LocalDateTime timestamp,
String eventType,
Object data
) {}
3.4 包接口优化
// 更清晰的模块边界
// 模块内使用完整包名
com.example.order.internal.OrderService
// 模块外使用接口
com.example.order.OrderFacade
四、快速开始
4.1 Maven依赖
<dependency>
<groupId>org.springframework.modulith</groupId>
<artifactId>spring-modulith-starter-core</artifactId>
<version>2.1.0-M4</version>
</dependency>
4.2 基本使用
@SpringBootApplication
@EnableApplicationModule
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
// 定义模块
@ApplicationModule
public class OrderModule {
@Autowired
private OrderRepository orderRepository;
// 领域事件
public void createOrder(Order order) {
orderRepository.save(order);
// 自动发布事件
}
}
五、适用场景
| 场景 | 推荐度 | 说明 |
|---|---|---|
| 新建微服务 | ⭐⭐⭐⭐⭐ | 模块化架构首选 |
| 单体拆分 | ⭐⭐⭐⭐ | 平滑过渡到微服务 |
| 事件驱动 | ⭐⭐⭐⭐ | 解耦业务逻辑 |
| DDD实践 | ⭐⭐⭐⭐⭐ | 天然支持DDD |
六、版本选择建议
如果你是新项目:
├── 追求最新特性 → 2.1 M4
└── 追求稳定 → 2.0.5
如果你是老项目:
├── 使用1.x → 升级到1.4.10
└── 计划升级 → 2.0.5(稳定)
七、总结
Spring Modulith 2.1 M4 带来了:
| 特性 | 价值 |
|---|---|
| JobRunr支持 | 可靠的定时任务处理 |
| 自定义触发注解 | 更灵活的事件控制 |
| AOT优化 | 更快的启动速度 |
| 包接口优化 | 更清晰的模块边界 |