此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Modulith 1.3.0! |
附录
附录 A:Spring 模数配置属性
财产 | 默认值 | 描述 |
---|---|---|
|
|
是否为异步处理终止配置默认值,即等待任务完成 2 秒。有关详细信息,请参阅。 |
|
没有 |
用于检测应用程序模块的策略。
可以是 or 的自定义实现的类名(如果未配置任何内容,这也是最终回退),也可以只选择显式注释为 或 jMolecules' 的包。有关详细信息,请参阅自定义应用程序模块检测。 |
|
|
如何将事件发布标记为已完成。 支持以下值:
|
|
|
是否开启事件外部化。 |
|
|
是否初始化 JDBC 事件发布架构。 |
|
事件发布表的架构名称。如果未指定,则表将不进行架构限定。 |
|
|
|
是否为 . |
|
|
是否自动为 MongoDB 启用事务。要求使用副本集运行数据库。 |
|
|
是否在 . |
|
|
是否为 . |
|
|
是否在应用程序重新启动时重新发布未完成的事件发布。 通常不建议在多实例部署中使用,因为其他实例可能仍在处理事件。 |
|
|
是否启用 |
|
|
要发布的事件的粒度。(, |
|
|
确定周边界时使用的。 |
|
|
要发布的事件的日期的时区。 |
|
|
自 1.3 起已弃用。喜欢。 |
|
没有 |
这可以是预定义值 , , 或 a 的完全限定类名之一,该类名将用于检查项目的哪些文件已更改。
顾名思义,将只考虑尚未提交的已更改文件。 将考虑自给定 Git 提交以来更改的所有文件,这些提交通过 ,特别有用的 CI 环境,其中该属性可以指向上次成功构建的提交哈希。 检测所有未完成的更改和尚未推送到 Current Branch 的 tracking 分支的更改,这主要对本地开发有用。 |
|
没有 |
要计算已更改文件集的提交哈希。 通常在 CI 环境中传播,以考虑自上次成功构建以来的所有更改。 |
附录 B:Spring Modulith 模块
起动机 | 典型范围 | 包括 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
模块 | 典型范围 | 描述 |
---|---|---|
|
|
一个 Spring Boot 执行器,用于通过 Actuator 公开应用程序模块结构。 |
|
|
要在 生产代码中用于自定义 Spring Modulith 的默认行为的抽象。 |
|
|
一个注释处理器,用于提取 Javadoc 以包含在 Application Module Canvas 中。 |
|
|
核心应用程序模块模型和 API。 |
|
|
用于从模块模型创建 Asciidoctor 和 PlantUML 文档的 API。 |
|
|
对 AMQP 的事件外部化支持。 |
|
|
用于自定义 Spring Modulith 事件功能的 API。 |
|
|
事件发布注册表的核心实现以及集成抽象和 . |
|
|
基于 Jackson 的 . |
|
|
基于 JDBC 的 . |
|
|
JMS 的事件外部化支持。 |
|
|
基于 JPA 的 . |
|
|
Kafka 的事件外部化支持。 |
|
|
Spring Messaging s中的事件外部化支持。 |
|
|
基于 MongoDB 的 . |
|
|
基于 Neo4j 的 . |
|
|
基于应用程序模块结构的测试执行优化。在此处查找更多详细信息。 |
|
|
此处介绍了 Passage of Time 事件实现。 |
|
|
可观测性基础设施。 |
|
|
支持在运行时引导实例。通常不直接依赖,而是传递由 和 使用。 |
|
|
集成测试支持。在此处查找更多详细信息。 |
附录 D:事件发布注册表架构
基于 JDBC 的事件发布注册表支持要求数据库中存在以下数据库架构。
如果您希望 Spring Modulith 为您创建架构,请将 application 属性设置为 。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);
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);
附录 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
-
组件图的图表样式现在默认为 (override by calling
DiagramStyle.C4
DiagramOptions.withStyle(DiagramStyle.UML)
) -
默认情况下,模块 canvas 会隐藏未公开的类型。 要在画布中包含 application-module-internal 类型,请配置为 。
CanvasOptions
….revealInternals()
-
组件图和应用程序模块画布的输出文件夹已从 移动到构建的目标文件夹(例如 Maven)中。
moduliths-docs
spring-modulith-docs
target