Spring Modulith 2.1 M4 发布:事件驱动架构新选择

3 阅读2分钟

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优化更快的启动速度
包接口优化更清晰的模块边界

参考资料