用途:在 Spring Boot 3 项目中引入 Spring Modulith(1.4 版本线搭配 Boot 3.5,较旧 Boot 3 版本需查官方兼容矩阵),组织与验证模块化单体架构。
主要能力与用法:先检查应用根包、模块边界和现有依赖图。以直接子包作为模块,模块根放 API,实现放 internal 子包;仅对有意的共享 API 暴露命名接口。需要显式依赖约束时使用 allowedDependencies,避免创建所有功能都依赖的通用共享模块。
边界验证:引入 test 范围的 spring-modulith-starter-test,在 CI 中运行 ApplicationModules.of(Application.class).verify(),检查循环依赖与对模块内部的访问;用 ApplicationModuleTest 测试模块内行为。结构检查通过不代表事务或投递正确。
可靠事件:发布仅含 ID 与必要事实的不可变事件负载,不发布受管 JPA 实体。时机合适时用 ApplicationModuleListener 处理异步事务监听。需跨进程崩溃仍投递时,配置基于所选 JDBC/JPA starter 的持久化事件发布注册表,并通过迁移管理其 schema;内存注册表和普通提交后回调不具备持久投递能力。
限制与注意:处理器须幂等,业务生效后、记录完成前崩溃可能导致重投;需明确重试、重发布与保留策略,并测试失败监听器与应用重启。使用外部 broker 时采用受支持的事件外化与持久发布跟踪,不承诺端到端 exactly-once。常见问题包括跨模块引用 internal 包、在无关任务中引入 Modulith、误以为 ApplicationModuleListener 自带来持久化、发布带懒加载关联的实体、只测happy path。官方来源涵盖模块验证、事件与发布注册表、兼容性。