附錄

附錄 A: Spring Boot 相容性

Spring Modulith 版本 Spring Boot 版本
(編譯時使用)
Spring Boot 版本
(示例測試時使用)
jMolecules
(編譯)
jMolecules
(測試)

2.0 (快照)

4.0 快照

4.0 快照和里程碑版本

2023.2

2023.2, 2025.0 RC2

1.4

3.5

3.1, 3.2, 3.3, 3.4, 3.5

2023.2

2023.2, 2025.0 RC2

1.3

3.4

3.1, 3.2, 3.3, 3.4, 3.5

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

用於檢測應用模組的策略。可以是 ApplicationModuleDetectionStrategy 的自定義實現的類名,或者 direct-subpackages(如果未配置任何內容,這也是最終的回退),或者 explicitly-annotated,僅選擇明確使用 @ApplicationModule 或 jMolecules 的 @Module 註解的包。詳情請參閱自定義應用模組檢測

spring.modulith.events.completion-mode

更新

如何將事件釋出標記為已完成。支援以下值:

  • update (預設) — 設定事件釋出條目的完成日期。

  • delete — 移除事件釋出條目。已完成的事件釋出不可透過 CompletedEventPublications 獲取。

  • archive — 從主資料庫抽象(表、集合或節點)中移除事件釋出條目,並在存檔(相同模式的表、集合或節點)中建立一個。詳情請參閱事件釋出完成

spring.modulith.events.externalization.enabled

true

是否啟用事件外部化。

spring.modulith.events.externalization.serialize-externalization

是否將事件外部化序列化到代理。

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

是否初始化 JDBC 事件釋出模式。

spring.modulith.events.jdbc.schema

事件釋出表的模式名稱。如果未指定,表將不進行模式限定。

spring.modulith.events.jdbc.use-legacy-structure

是否使用遺留的事件釋出資料庫結構。

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

是否在 Neo4j 事件釋出事件雜湊屬性上建立索引。

spring.modulith.events.rabbitmq.enable-json

true

是否為 RabbitTemplate 啟用 JSON 支援。

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

是否在應用程式重啟時重新發布未完成的事件釋出。在多例項部署中通常不推薦,因為其他例項可能仍在處理事件。

spring.modulith.events.staleness.check-interval

Duration.ofMinutes(1)

我們應該檢查過期事件釋出的間隔。

spring.modulith.events.staleness.processing

Duration.ZERO

事件釋出在處理狀態下經過多長時間被視為過期。

spring.modulith.events.staleness.published

Duration.ZERO

事件釋出在已釋出狀態下經過多長時間被視為過期。

spring.modulith.events.staleness.resubmitted

Duration.ZERO

事件釋出在重新提交狀態下經過多長時間被視為過期。

spring.modulith.moments.enableTimeMachine

是否啟用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

自 1.3 起已棄用。請優先使用 spring.modulith.events.republish-outstanding-events-on-restart

spring.modulith.runtime.flyway-enabled

配置是否啟用模組特定的 Flyway 自定義。如果啟用,配置在應用程式中的 Flyway 例項將進行增強,以額外執行位於配置位置的模組特定子資料夾中的遷移,按模組依賴關係的順序執行。這允許測試執行僅應用實際測試執行所需的遷移。詳情請參閱此部分

spring.modulith.runtime.verification-enabled

是否在應用程式啟動期間驗證應用程式模組的排列。需要在類路徑上包含 spring-modulith-runtime 工件。更多資訊請參閱Spring Modulith 執行時支援部分

spring.modulith.test.file-modification-detector

這可以是預定義值 uncommitted-changesreference-commitdefault 之一,或者是 FileModificationDetector 的完全限定類名,用於檢查專案中的哪些檔案已更改。正如其名稱所示,uncommitted-changes 將僅考慮尚未提交的已更改檔案。reference-commit 將考慮自透過 spring.modulith.test.reference-commit 提供的給定 Git 提交以來的所有已更改檔案,這在 CI 環境中特別有用,其中該屬性可以指向上次成功構建的提交雜湊。default 檢測所有未提交的更改以及尚未推送到當前分支的跟蹤分支的更改,這主要用於本地開發。

spring.modulith.test.reference-commit

用於計算已更改檔案集的提交雜湊。通常在 CI 環境中傳播,以考慮自上次成功構建以來的所有更改。

附錄 C: Spring Modulith 模組

表 1. Spring Modulith starter POM
啟動器 典型範圍 包括

spring-modulith-starter-core

compile

  • spring-modulith-api

  • spring-modulith-apt

  • 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 執行器,透過執行器公開應用程式模組結構。

spring-modulith-api

compile

在生產程式碼中用於自定義 Spring Modulith 預設行為的抽象。

spring-modulith-apt

compile

一個註解處理器,用於提取 Javadoc 以包含在應用模組畫布中。

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-messaging

runtime

將事件外部化到 Spring Messaging MessageChannel 的支援。

spring-modulith-events-mongodb

runtime

EventPublicationRegistry 的基於 MongoDB 的實現。

spring-modulith-events-neo4j

runtime

EventPublicationRegistry 的基於 Neo4j 的實現。

spring-modulith-junit

test

基於應用模組結構的測試執行最佳化。更多詳情請參見此處

spring-modulith-moments

compile

此處描述的時光流逝事件實現此處

spring-modulith-observability

runtime

此處描述的可觀測性基礎設施此處

spring-modulith-runtime

runtime

支援在執行時引導 ApplicationModules 例項。通常不直接依賴,而是由 spring-modulith-actuatorspring-modulith-observability 傳遞使用。

spring-modulith-test

test

整合測試支援。更多詳情請參見此處

附錄 D: 事件釋出登錄檔模式

基於 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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(9) WITH TIME ZONE,
  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_ARCHIVE
(
    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,
    `STATUS`               VARCHAR(20),
    COMPLETION_ATTEMPTS    INT,
    LAST_RESUBMISSION_DATE TIMESTAMP(9) WITH TIME ZONE,
    PRIMARY KEY (ID)
    );
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (COMPLETION_DATE);

舊版模式

標準模式
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);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
(
    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_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(9),
  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_ARCHIVE
(
  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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(9),
  PRIMARY KEY (ID)
);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (COMPLETION_DATE);

舊版模式

標準模式
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_ARCHIVE
(
    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_ARCHIVE_BY_LISTENER_ID_AND_SERIALIZED_EVENT_IDX ON EVENT_PUBLICATION_ARCHIVE (LISTENER_ID, SERIALIZED_EVENT);
CREATE INDEX IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX ON EVENT_PUBLICATION_ARCHIVE (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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(6),
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
(
  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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(6),
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (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)
);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
(
    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_ARCHIVE_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,
  STATUS                 VARCHAR(20) NULL,
  COMPLETION_ATTEMPTS    INT NULL,
  LAST_RESUBMISSION_DATE DATETIME2(6) NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);
啟用存檔的模式
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION_ARCHIVE')
CREATE TABLE EVENT_PUBLICATION_ARCHIVE
(
  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,
  STATUS                 VARCHAR(20) NULL,
  COMPLETION_ATTEMPTS    INT NULL,
  LAST_RESUBMISSION_DATE DATETIME2(6) NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);

舊版模式

標準模式
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)
);
啟用存檔的模式
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EVENT_PUBLICATION_ARCHIVE')
CREATE TABLE EVENT_PUBLICATION_ARCHIVE
(
    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_ARCHIVE_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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_BY_COMPLETION_DATE_IDX (COMPLETION_DATE)
);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
(
  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,
  STATUS                 VARCHAR(20),
  COMPLETION_ATTEMPTS    INT,
  LAST_RESUBMISSION_DATE TIMESTAMP(6) DEFAULT NULL NULL,
  PRIMARY KEY (ID),
  INDEX EVENT_PUBLICATION_ARCHIVE_BY_COMPLETION_DATE_IDX (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)
);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS EVENT_PUBLICATION_ARCHIVE
(
    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_ARCHIVE_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,
  status                 TEXT,
  completion_attempts    INT,
  last_resubmission_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);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS event_publication_archive
(
  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,
  status                 TEXT,
  completion_attempts    INT,
  last_resubmission_date TIMESTAMP WITH TIME ZONE,
  PRIMARY KEY (id)
);
CREATE INDEX IF NOT EXISTS event_publication_archive_serialized_event_hash_idx ON event_publication_archive USING hash(serialized_event);
CREATE INDEX IF NOT EXISTS event_publication_archive_by_completion_date_idx ON event_publication_archive (completion_date);

舊版模式

標準模式
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);
啟用存檔的模式
CREATE TABLE IF NOT EXISTS event_publication_archive
(
    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_archive_serialized_event_hash_idx ON event_publication_archive USING hash(serialized_event);
CREATE INDEX IF NOT EXISTS event_publication_archive_by_completion_date_idx ON event_publication_archive (completion_date);

附錄 E: 從 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 移動到位於構建目標資料夾(例如 Maven 的 target)中的 spring-modulith-docs

© . This site is unofficial and not affiliated with VMware.