附录

附录 A:Spring Boot 兼容性

Spring 模数版本 Spring Boot 版本
(针对其编译)
Spring Boot 版本
(测试示例)
jMolecules
(已编译)
jMolecules
(已测试)

1.4(快照)

3.4

3.1, 3.2, 3.3, 3.4

2023.2

2023.2、2025.0 RC2

1.3

3.4

3.1, 3.2, 3.3, 3.4

2023.1

2023.1、2023.2、2025.0 RC2

1.2

3.3

3.1, 3.2, 3.3, 3.4

2023.1

2023.1、2023.2、2025.0 RC2

1.1

3.2

3.1, 3.2, 3.3, 3.4

2023.1

2023.1、2023.2、2025.0 RC2

附录 B:Spring Modulith 配置属性

属性 默认值 描述

spring.modulith.default-async-termination

true

是否为异步处理终止配置默认值,即等待任务完成 2 秒。看TaskExecutionProperties了解详情。

spring.modulith.detection-strategy

没有

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

spring.modulith.events.completion-mode

update

如何将事件发布标记为已完成。 支持以下值:

  • update(默认) — 设置活动发布条目的完成日期。

  • delete— 删除事件发布条目。 已完成的活动出版物无法通过CompletedEventPublications.

  • archive— 从主数据库抽象(表、集合或节点)中删除事件发布条目,并在存档(具有相同架构的表、集合或节点)中创建一个事件发布条目。 有关详细信息,请参阅 事件发布完成

spring.modulith.events.externalization.enabled

true

是否开启事件外部化。

spring.modulith.events.jdbc.schema-initialization.enabled

false

是否初始化 JDBC 事件发布架构。

spring.modulith.events.jdbc.schema

事件发布表的架构名称。如果未指定,则表将不进行架构限定。

spring.modulith.events.kafka.enable-json

true

是否启用 JSON 支持KafkaTemplate.

spring.modulith.events.mongodb.transaction-management.enabled

true

是否自动为 MongoDB 启用事务。要求使用副本集运行数据库。

spring.modulith.events.neo4j.event-index.enabled

false

是否在 Neo4j 事件发布事件哈希属性上创建索引。

spring.modulith.events.rabbitmq.enable-json

true

是否启用 JSON 支持RabbitTemplate.

spring.modulith.events.republish-outstanding-events-on-restart

false

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

spring.modulith.moments.enableTimeMachine

false

是否启用TimeMachine.

spring.modulith.moments.granularity

HOURS

要发布的事件的粒度。(HOURS,DAYS)

spring.modulith.moments.locale

Locale.getDefault()

Locale在确定周边界时使用。

spring.modulith.moments.zoneId

ZoneOffset.UTC

要发布的事件的日期的时区。

spring.modulith.republish-outstanding-events-on-restart

false

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

spring.modulith.test.file-modification-detector

没有

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

spring.modulith.test.reference-commit

没有

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

附录 C:Spring Modulith 模块

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

spring-modulith-starter-core

compile

spring-modulith-starter-insight

runtime

spring-modulith-starter-jdbc

compile

spring-modulith-starter-jpa

compile

spring-modulith-starter-mongodb

compile

spring-modulith-starter-neo4j

compile

spring-modulith-starter-test

test

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

spring-modulith-actuator

runtime

一个 Spring Boot 执行器,用于通过 Actuator 公开应用程序模块结构。

spring-modulith-api

compile

要在 生产代码中用于自定义 Spring Modulith 的默认行为的抽象。

spring-modulith-apt

compile

一个注释处理器,用于提取 Javadoc 以包含在 Application Module Canvas 中。

spring-modulith-core

runtime

核心应用程序模块模型和 API。

spring-modulith-docs

test

DocumenterAPI 从模块模型创建 Asciidoctor 和 PlantUML 文档。

spring-modulith-events-amqp

runtime

对 AMQP 的事件外部化支持。

spring-modulith-events-api

runtime

用于自定义 Spring Modulith 事件功能的 API。

spring-modulith-events-core

runtime

事件发布注册表的核心实现以及集成抽象EventPublicationRegistryEventPublicationSerializer.

spring-modulith-events-jackson

runtime

基于 Jackson 的EventPublicationSerializer.

spring-modulith-events-jdbc

runtime

基于 JDBC 的EventPublicationRegistry.

spring-modulith-events-jms

runtime

JMS 的事件外部化支持。

spring-modulith-events-jpa

runtime

基于 JPA 的EventPublicationRegistry.

spring-modulith-events-kafka

runtime

Kafka 的事件外部化支持。

spring-modulith-events-messaging

runtime

Spring 消息传递中的事件外部化支持MessageChannels.

spring-modulith-events-mongodb

runtime

基于 MongoDB 的EventPublicationRegistry.

spring-modulith-events-neo4j

runtime

基于 Neo4j 的EventPublicationRegistry.

spring-modulith-junit

test

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

spring-modulith-moments

compile

此处介绍了 Passage of Time 事件实现。

spring-modulith-observability

runtime

可观测性基础设施

spring-modulith-runtime

runtime

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

spring-modulith-test

test

集成测试支持。在此处查找更多详细信息。

附录 D:已弃用的模块

表 3.已弃用的模块
模块 废弃时间 描述

spring-modulith-events-aws-sns

1.3

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

spring-modulith-events-aws-sqs

1.3

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

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

基于 JDBC 的事件发布注册表支持要求数据库中存在以下数据库架构。 如果您希望 Spring Modulith 为您创建模式,请设置 application 属性spring.modulith.events.jdbc-schema-initialization.enabledtrue.

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);

MariaDB的

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 服务器

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 (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.ApplicationModules

  • o.m.model.ModuleDetectionStrategy已重命名为o.s.m.model.ApplicationModuleDetectionStrategy

  • @o.m.test.ModuleTest已重命名为@o.s.m.test.ApplicationModuleTest

  • o.m.docs.Documenter.Options已重命名为o.s.m.docs.Documenter.DiagramOptions

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

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

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