对于最新的稳定版本,请使用 Spring Modulith 1.4.3spring-doc.cadn.net.cn

附录

附录 A:Spring Boot 兼容性

弹簧 Modulith 版本 Spring Boot 版本
(编译)
Spring Boot 版本
(测试示例)
jMolecules
(编译)
jMolecules
(已测试)

1.4(快照)spring-doc.cadn.net.cn

3.4spring-doc.cadn.net.cn

3.1, 3.2, 3.3, 3.4spring-doc.cadn.net.cn

2023.2spring-doc.cadn.net.cn

2023.2、2025.0 RC2spring-doc.cadn.net.cn

1.3spring-doc.cadn.net.cn

3.4spring-doc.cadn.net.cn

3.1, 3.2, 3.3, 3.4spring-doc.cadn.net.cn

2023.1spring-doc.cadn.net.cn

2023.1, 2023.2, 2025.0 RC2spring-doc.cadn.net.cn

1.2spring-doc.cadn.net.cn

3.3spring-doc.cadn.net.cn

3.1, 3.2, 3.3, 3.4spring-doc.cadn.net.cn

2023.1spring-doc.cadn.net.cn

2023.1, 2023.2, 2025.0 RC2spring-doc.cadn.net.cn

1.1spring-doc.cadn.net.cn

3.2spring-doc.cadn.net.cn

3.1, 3.2, 3.3, 3.4spring-doc.cadn.net.cn

2023.1spring-doc.cadn.net.cn

2023.1, 2023.2, 2025.0 RC2spring-doc.cadn.net.cn

附录 B:Spring Modulith 配置属性

属性 默认值 描述

spring.modulith.default-async-terminationspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否配置异步处理终止的默认值,即等待任务完成 2 秒。看TaskExecutionProperties了解详情。spring-doc.cadn.net.cn

spring.modulith.detection-strategyspring-doc.cadn.net.cn

没有spring-doc.cadn.net.cn

用于检测应用程序模块的策略。 可以是自定义实现的类名ApplicationModuleDetectionStrategydirect-subpackages(如果未配置任何内容,这也是最终的回退)或explicitly-annotated仅选择显式注释的包@ApplicationModule或 jMolecules'@Module.有关详细信息,请参阅自定义应用程序模块检测spring-doc.cadn.net.cn

spring.modulith.events.completion-modespring-doc.cadn.net.cn

updatespring-doc.cadn.net.cn

如何将事件发布标记为已完成。 支持以下值:spring-doc.cadn.net.cn

  • update(默认) - 设置事件发布条目的完成日期。spring-doc.cadn.net.cn

  • delete- 移除事件发布条目。 已完成的活动出版物无法通过CompletedEventPublications.spring-doc.cadn.net.cn

  • archive— 从主数据库抽象(表、集合或节点)中删除事件发布条目,并在存档(同一模式的表、集合或节点)中创建一个。 有关详细信息,请参阅事件发布完成spring-doc.cadn.net.cn

spring.modulith.events.externalization.enabledspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否启用事件外部化。spring-doc.cadn.net.cn

spring.modulith.events.jdbc.schema-initialization.enabledspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

是否初始化 JDBC 事件发布模式。spring-doc.cadn.net.cn

spring.modulith.events.jdbc.schemaspring-doc.cadn.net.cn

事件发布表的架构名称。如果未指定,则表将不会进行模式限定。spring-doc.cadn.net.cn

spring.modulith.events.kafka.enable-jsonspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否启用 JSON 支持KafkaTemplate.spring-doc.cadn.net.cn

spring.modulith.events.mongodb.transaction-management.enabledspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否自动启用 MongoDB 的事务。要求数据库使用副本集运行。spring-doc.cadn.net.cn

spring.modulith.events.neo4j.event-index.enabledspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

是否在 Neo4j 事件发布事件哈希属性上创建索引。spring-doc.cadn.net.cn

spring.modulith.events.rabbitmq.enable-jsonspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

是否启用 JSON 支持RabbitTemplate.spring-doc.cadn.net.cn

spring.modulith.events.republish-outstanding-events-on-restartspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

是否在重新启动应用程序时重新发布未完成的事件发布。 通常不建议在多实例部署中使用,因为其他实例可能仍在处理事件。spring-doc.cadn.net.cn

spring.modulith.moments.enableTimeMachinespring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

是否启用TimeMachine.spring-doc.cadn.net.cn

spring.modulith.moments.granularityspring-doc.cadn.net.cn

HOURSspring-doc.cadn.net.cn

要发布的事件的粒度。(HOURS,DAYS)spring-doc.cadn.net.cn

spring.modulith.moments.localespring-doc.cadn.net.cn

Locale.getDefault()spring-doc.cadn.net.cn

Locale在确定周边界时使用。spring-doc.cadn.net.cn

spring.modulith.moments.zoneIdspring-doc.cadn.net.cn

ZoneOffset.UTCspring-doc.cadn.net.cn

要发布的事件日期的时区。spring-doc.cadn.net.cn

spring.modulith.republish-outstanding-events-on-restartspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

自 1.3 起已弃用。喜欢spring.modulith.events.republish-outstanding-events-on-restart.spring-doc.cadn.net.cn

spring.modulith.test.file-modification-detectorspring-doc.cadn.net.cn

没有spring-doc.cadn.net.cn

这可以是预定义值之一uncommitted-changes,reference-commit,defaultFileModificationDetector这将用于检查项目的哪些文件已更改。 顾名思义,uncommitted-changes将仅考虑尚未提交的已更改文件。reference-commit将考虑自通过spring.modulith.test.reference-commit,特别有用的 CI 环境,其中该属性可以指向上次成功构建的提交哈希。default检测所有未提交的更改和尚未推送到当前分支的跟踪分支的更改,这主要对本地开发有用。spring-doc.cadn.net.cn

spring.modulith.test.reference-commitspring-doc.cadn.net.cn

没有spring-doc.cadn.net.cn

要计算更改文件集的提交哈希。 通常在 CI 环境中传播,以考虑自上次成功构建以来的所有更改。spring-doc.cadn.net.cn

附录 C:Spring Modulith 模块

表 1.Spring Modulith Starters POM
起动机 典型范围 包括

spring-modulith-starter-corespring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

spring-modulith-starter-insightspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

spring-modulith-starter-jdbcspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

spring-modulith-starter-jpaspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

spring-modulith-starter-mongodbspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

spring-modulith-starter-neo4jspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

spring-modulith-starter-testspring-doc.cadn.net.cn

testspring-doc.cadn.net.cn

表 2.单个弹簧 Modulith JAR
模块 典型范围 描述

spring-modulith-actuatorspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

一个 Spring Boot 执行器,用于通过执行器公开应用程序模块结构。spring-doc.cadn.net.cn

spring-modulith-apispring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

要在生产代码中用于自定义 Spring Modulith 的默认行为的抽象。spring-doc.cadn.net.cn

spring-modulith-aptspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

一个注释处理器,用于提取 Javadoc 以包含在应用程序模块画布中。spring-doc.cadn.net.cn

spring-modulith-corespring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

核心应用模块模型和API。spring-doc.cadn.net.cn

spring-modulith-docsspring-doc.cadn.net.cn

testspring-doc.cadn.net.cn

DocumenterAPI 从模块模型创建 Asciidoctor 和 PlantUML 文档。spring-doc.cadn.net.cn

spring-modulith-events-amqpspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

AMQP 的事件外部化支持。spring-doc.cadn.net.cn

spring-modulith-events-apispring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

API 来自定义 Spring Modulith 的事件功能。spring-doc.cadn.net.cn

spring-modulith-events-corespring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

事件发布注册表的核心实现以及集成抽象EventPublicationRegistryEventPublicationSerializer.spring-doc.cadn.net.cn

spring-modulith-events-jacksonspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

基于Jackson的EventPublicationSerializer.spring-doc.cadn.net.cn

spring-modulith-events-jdbcspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

基于 JDBC 的EventPublicationRegistry.spring-doc.cadn.net.cn

spring-modulith-events-jmsspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

对 JMS 的事件外部化支持。spring-doc.cadn.net.cn

spring-modulith-events-jpaspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

基于 JPA 的EventPublicationRegistry.spring-doc.cadn.net.cn

spring-modulith-events-kafkaspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

对 Kafka 的事件外部化支持。spring-doc.cadn.net.cn

spring-modulith-events-messagingspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

Spring Messaging 中的事件外部化支持MessageChannels.spring-doc.cadn.net.cn

spring-modulith-events-mongodbspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

基于 MongoDB 的EventPublicationRegistry.spring-doc.cadn.net.cn

spring-modulith-events-neo4jspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

基于 Neo4j 的EventPublicationRegistry.spring-doc.cadn.net.cn

spring-modulith-junitspring-doc.cadn.net.cn

testspring-doc.cadn.net.cn

基于应用程序模块结构的测试执行优化。在此处查找更多详细信息。spring-doc.cadn.net.cn

spring-modulith-momentsspring-doc.cadn.net.cn

compilespring-doc.cadn.net.cn

此处描述的时间流逝事件实现。spring-doc.cadn.net.cn

spring-modulith-observabilityspring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

此处描述的可观测性基础设施。spring-doc.cadn.net.cn

spring-modulith-runtimespring-doc.cadn.net.cn

runtimespring-doc.cadn.net.cn

支持引导ApplicationModules实例。通常不直接依赖,而是传递地使用spring-modulith-actuatorspring-modulith-observability.spring-doc.cadn.net.cn

spring-modulith-testspring-doc.cadn.net.cn

testspring-doc.cadn.net.cn

集成测试支持。在此处查找更多详细信息。spring-doc.cadn.net.cn

附录 D:已弃用的模块

表 3.已弃用的模块表
模块 自 2000 年以来已弃用 描述

spring-modulith-events-aws-snsspring-doc.cadn.net.cn

1.3spring-doc.cadn.net.cn

请迁移到io.awspring.cloud:spring-cloud-aws-modulith-events-sns.请参阅此链接spring-doc.cadn.net.cn

spring-modulith-events-aws-sqsspring-doc.cadn.net.cn

1.3spring-doc.cadn.net.cn

请迁移到io.awspring.cloud:spring-cloud-aws-modulith-events-sqs.请参阅此链接spring-doc.cadn.net.cn

附录 E:事件发布注册表架构

基于 JDBC 的事件发布注册表支持期望数据库中存在以下数据库模式。 如果您希望 Spring Modulith 为您创建模式,请设置应用程序属性spring.modulith.events.jdbc-schema-initialization.enabledtrue.spring-doc.cadn.net.cn

H2

CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
(
  ID               UUID NOT NULL,
  COMPLETION_DATE  TIMESTAMP(9) WITH TIME ZONE,
  EVENT_TYPE       VARCHAR(512) NOT NULL,
  LISTENER_ID      VARCHAR(512) NOT NULL,
  PUBLICATION_DATE TIMESTAMP(9) WITH TIME ZONE NOT NULL,
  SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
  PRIMARY KEY (ID)
);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);

HSQLDB

CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
(
  ID               UUID NOT NULL,
  COMPLETION_DATE  TIMESTAMP(9),
  EVENT_TYPE       VARCHAR(512) NOT NULL,
  LISTENER_ID      VARCHAR(512) NOT NULL,
  PUBLICATION_DATE TIMESTAMP(9) NOT NULL,
  SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
  PRIMARY KEY (ID)
);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION (COMPLETION_DATE);

玛丽亚数据库

CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
(
  ID               VARCHAR(36) NOT NULL,
  LISTENER_ID      VARCHAR(512) NOT NULL,
  EVENT_TYPE       VARCHAR(512) NOT NULL,
  SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
  PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
  COMPLETION_DATE  TIMESTAMP(6) DEFAULT NULL NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);

Microsoft SQL Server

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION')
CREATE TABLE EVENT_PUBLICATION
(
  ID               VARCHAR(36) NOT NULL,
  LISTENER_ID      VARCHAR(512) NOT NULL,
  EVENT_TYPE       VARCHAR(512) NOT NULL,
  SERIALIZED_EVENT VARCHAR(MAX) NOT NULL,
  PUBLICATION_DATE DATETIME2(6) NOT NULL,
  COMPLETION_DATE  DATETIME2(6) NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);

MySQL

CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION
(
  ID               VARCHAR(36) NOT NULL,
  LISTENER_ID      VARCHAR(512) NOT NULL,
  EVENT_TYPE       VARCHAR(512) NOT NULL,
  SERIALIZED_EVENT VARCHAR(4000) NOT NULL,
  PUBLICATION_DATE TIMESTAMP(6) NOT NULL,
  COMPLETION_DATE  TIMESTAMP(6) DEFAULT NULL NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);

PostgreSQL

CREATE TABLE IF NOT EXISTS event_publication
(
  id               UUID NOT NULL,
  listener_id      TEXT NOT NULL,
  event_type       TEXT NOT NULL,
  serialized_event TEXT NOT NULL,
  publication_date TIMESTAMP WITH TIME ZONE NOT NULL,
  completion_date  TIMESTAMP WITH TIME ZONE,
  PRIMARY KEY (id)
);
CREATE INDEX IF NOT EXISTS event_publication_serialized_event_hash_idx ON event_publication USING hash(serialized_event);
CREATE INDEX IF NOT EXISTS event_publication_by_completion_date_idx ON event_publication (completion_date);

附录 F:从 Moduliths 迁移

  • o.m.model.Modules已重命名为o.s.m.model.ApplicationModulesspring-doc.cadn.net.cn

  • o.m.model.ModuleDetectionStrategy已重命名为o.s.m.model.ApplicationModuleDetectionStrategyspring-doc.cadn.net.cn

  • @o.m.test.ModuleTest已重命名为@o.s.m.test.ApplicationModuleTestspring-doc.cadn.net.cn

  • o.m.docs.Documenter.Options已重命名为o.s.m.docs.Documenter.DiagramOptionsspring-doc.cadn.net.cn

  • 组件图的图表样式现在默认为DiagramStyle.C4(通过调用DiagramOptions.withStyle(DiagramStyle.UML))spring-doc.cadn.net.cn

  • 默认情况下,模块画布隐藏未公开的类型。 要在画布中包含 application-module-internal 类型,请配置CanvasOptions….revealInternals().spring-doc.cadn.net.cn

  • 组件图和应用程序模块画布的输出文件夹已从moduliths-docsspring-modulith-docs位于构建的目标文件夹(例如target对于 Maven)。spring-doc.cadn.net.cn