付録

付録 A: Spring Modulith 構成プロパティ

プロパティ デフォルト値 説明

spring.modulith.default-async-termination

true

非同期処理の終了のデフォルトを構成するかどうか、つまりタスクの補完を 2 秒間待機するかどうか。詳細については、TaskExecutionProperties を参照してください。

spring.modulith.detection-strategy

なし

アプリケーションモジュールを検出するために適用される戦略。ApplicationModuleDetectionStrategy または direct-subpackages (何も構成されていない場合の最終的なフォールバックでもあります) のカスタム実装のクラス名、または @ApplicationModule または jMolecules の @Module で明示的にアノテーションが付けられたパッケージのみを選択するための explicitly-annotated のいずれかになります。詳細については、アプリケーションモジュール検出をカスタマイズするを参照してください。

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

compile

  • spring-modulith-starter-core

  • spring-modulith-events-api

  • spring-modulith-events-core (ランタイム)

  • spring-modulith-events-neo4j (ランタイム)

  • 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 アクチュエーター。

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

イベント発行レジストリのコア実装と統合抽象化 EventPublicationRegistry および EventPublicationSerializer

spring-modulith-events-jackson

runtime

Jackson ベースの EventPublicationSerializer 実装。

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

MongoDB ベースの EventPublicationRegistry 実装。

spring-modulith-events-neo4j

runtime

EventPublicationRegistry の Neo4j ベースの実装。

spring-modulith-moments

compile

Passage of Time イベントの実装については、こちらで説明されています。

spring-modulith-runtime

runtime

実行時に ApplicationModules インスタンスをブートストラップするためのサポート。通常は spring-modulith-actuator および spring-modulith-observability に直接依存せず、推移的に使用されます。

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: モジュリスからの移行

  • 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) を呼び出してオーバーライドする)

  • モジュールキャンバスは、デフォルトで非公開型を非表示にします。キャンバスに application-module-internal 型を含めるには、CanvasOptions を  … .revealInternals() に構成します。

  • コンポーネント図とアプリケーションモジュールキャンバスの出力フォルダーは、ビルドのターゲットフォルダー (Maven の target など) にある moduliths-docs から spring-modulith-docs に移動しました。