附录

附录 A: Spring Modulith 配置属性

属性 默认值 描述

spring.modulith.default-async-termination

true

是否为异步处理终止配置默认值,即等待任务完成 2 秒。有关详细信息,请参见 TaskExecutionProperties

spring.modulith.events.externalization.enabled

true

是否启用事件外部化。

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

false

是否初始化 JDBC 事件发布模式。

spring.modulith.events.kafka.enable-json

true

是否为 KafkaTemplate 启用 JSON 支持。

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

true

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

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

false

是否在 . 上创建索引。

spring.modulith.events.rabbitmq.enable-json

true

是否为 RabbitTemplate 启用 JSON 支持。

spring.modulith.moments.enableTimeMachine

false

是否启用 TimeMachine

spring.modulith.moments.granularity

HOURS

要发布的事件的粒度。(HOURSDAYS

spring.modulith.moments.locale

Locale.getDefault()

确定周边界时要使用的 Locale

spring.modulith.moments.zoneId

ZoneOffset.UTC

正在发布的事件的日期的时间区域。

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

false

是否在应用程序重新启动时重新发布未完成的事件发布。

附录 B:Spring Modulith 模块

表 1. Spring Modulith 启动器 POM
启动器 典型范围 包括

spring-modulith-starter-core

compile

  • spring-modulith-api

  • spring-modulith-moments

  • spring-modulith-core(运行时)

  • spring-modulith-runtime(运行时)

spring-modulith-starter-insight

runtime

  • spring-modulith-actuator(运行时)

  • spring-modulith-observability(运行时)

  • spring-boot-starter-actuator(运行时)

spring-modulith-starter-jdbc

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core(运行时)

  • spring-modulith-events-jdbc(运行时)

  • spring-modulith-events-jackson(运行时)

spring-modulith-starter-jpa

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core(运行时)

  • spring-modulith-events-jpa(运行时)

  • spring-modulith-events-jackson(运行时)

spring-modulith-starter-mongodb

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core(运行时)

  • spring-modulith-events-mongodb(运行时)

  • spring-modulith-events-jackson(运行时)

spring-modulith-starter-test

test

  • spring-modulith-docs

  • spring-modulith-test

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

spring-modulith-actuator

runtime

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

spring-modulith-api

compile

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

spring-modulith-core

runtime

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

spring-modulith-docs

test

Documenter API 用于从模块模型创建 Asciidoctor 和 PlantUML 文档。

spring-modulith-events-amqp

runtime

AMQP 的事件外部化支持。

spring-modulith-events-api

runtime

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

spring-modulith-events-core

runtime

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

spring-modulith-events-jackson

runtime

EventPublicationSerializer 的基于 Jackson 的实现。

spring-modulith-events-jdbc

runtime

EventPublicationRegistry 的基于 JDBC 的实现。

spring-modulith-events-jms

runtime

JMS 的事件外部化支持。

spring-modulith-events-jpa

runtime

EventPublicationRegistry 的基于 JPA 的实现。

spring-modulith-events-kafka

runtime

Kafka 的事件外部化支持。

spring-modulith-events-mongodb

runtime

EventPublicationRegistry 的基于 MongoDB 的实现。

spring-modulith-moments

compile

此处描述的时间流逝事件实现 这里

spring-modulith-runtime

runtime

支持在运行时引导 ApplicationModules 实例。通常不会直接依赖,而是被 spring-modulith-actuatorspring-modulith-observability transitively 使用。

spring-modulith-observability

runtime

此处描述的可观察性基础设施 这里

附录 C:事件发布注册表模式

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

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

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

附录 D:从 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) 覆盖)

  • 模块画布默认隐藏未公开的类型。要在画布中包含应用程序模块内部类型,请将 CanvasOptions 配置为 ….revealInternals()

  • 组件图和应用程序模块画布的输出文件夹已从 moduliths-docs 移动到构建的 target 文件夹中的 spring-modulith-docs(例如,Maven 的 target)。