附錄

附錄 A:Spring Modulith 設定屬性

屬性 預設值 描述

spring.modulith.default-async-termination

true

是否設定非同步處理終止的預設值,即等待任務完成 2 秒。詳見 TaskExecutionProperties

spring.modulith.detection-strategy

none

用於偵測應用程式模組的策略。可以是 ApplicationModuleDetectionStrategy 自訂實作的類別名稱,或是 direct-subpackages(如果沒有設定任何內容,這也是最終的回退方案),或是 explicitly-annotated,僅選擇明確使用 @ApplicationModule 或 jMolecules 的 @Module 註解的套件。詳見自訂應用程式模組偵測

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 starter POM
Starter 典型範疇 包含

spring-modulith-starter-core

compile

  • spring-modulith-api

  • spring-modulith-moments

  • spring-modulith-core (runtime)

  • spring-modulith-runtime (runtime)

spring-modulith-starter-insight

runtime

  • spring-modulith-actuator (runtime)

  • spring-modulith-observability (runtime)

  • spring-boot-starter-actuator (runtime)

spring-modulith-starter-jdbc

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core (runtime)

  • spring-modulith-events-jdbc (runtime)

  • spring-modulith-events-jackson (runtime)

spring-modulith-starter-jpa

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core (runtime)

  • spring-modulith-events-jpa (runtime)

  • spring-modulith-events-jackson (runtime)

spring-modulith-starter-mongodb

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core (runtime)

  • spring-modulith-events-mongodb (runtime)

  • spring-modulith-events-jackson (runtime)

spring-modulith-starter-neo4j

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core (runtime)

  • spring-modulith-events-neo4j (runtime)

  • spring-modulith-events-jackson (runtime)

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

用於自訂 Spring Modulith 事件功能的 API。

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-events-neo4j

runtime

EventPublicationRegistry 的 Neo4j 基礎實作。

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

整合測試支援。在此處找到更多詳細資訊。

附錄 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 移至 spring-modulith-docs,位於組建目標資料夾中(例如 Maven 的 target)。