Spring Modulith 运行时支持

前几章描述的功能都曾在测试场景中使用应用模块的布局进行验证和文档化,或者作为一般支持功能,帮助松散耦合模块,但并未直接与应用模块结构协作。 在本节中,我们将介绍 Spring Modulith 在应用运行时对模块初始化的支持。spring-doc.cadn.net.cn

如果你对这里描述的应用模块检测应用自定义,除非已经存在,否则你需要把这些自定义转移到你的生产源,以确保这些功能被考虑在内。

为应用模块设置运行时支持

要启用 Spring Modulith 的运行时支持,请确保包含Spring-模量-运行时间你的项目里的JAR。spring-doc.cadn.net.cn

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-runtime</artifactId>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-runtime'
}

添加这个 JAR 会触发 Spring Boot 自动配置,注册应用程序中的以下组件:spring-doc.cadn.net.cn

应用模块初始化器

在处理应用模块时,启动应用时通常需要执行某个特定模块的代码。这意味着该代码的执行顺序必须遵循应用模块的依赖结构。如果模块B依赖于模块A,那么A的初始化代码必须先运行,即使初始化器不直接依赖于其他模块。spring-doc.cadn.net.cn

图

当然,开发者可以通过 Spring 的标准定义执行顺序@Order注释或命令Spring Modulith 提供了应用模块初始化器在应用启动时运行的 BEANS 接口。这些 BEANS 的执行顺序将自动遵循应用模块的依赖结构。spring-doc.cadn.net.cn

@Component
class MyInitializer implements ApplicationModuleInitializer {

  @Override
  public void initialize() {
    // Initialization code goes here
  }
}
@Component
class MyInitializer : ApplicationModuleInitializer {


  override fun initialize() {
    // Initialization code goes here
  }
}

注意应用模块初始化器只有当Spring-模量-运行时间JAR位于类路径上(参见“设置应用模块运行时支持”),因为它会根据应用模块结构拉取初始化器所需的依赖关系,以拓扑排序初始化器。spring-doc.cadn.net.cn

应用模块感知飞行路径迁移

自 Spring Modulith 2.0 起,我们支持模块特定的 Flyway 迁移执行。应用模块被鼓励仅为自身持久数据定义迁移,这意味着这些迁移必须按照模块依赖树的顺序执行。spring-doc.cadn.net.cn

假设默认的飞行路径设置,迁移点位于ClassPath:DB/迁移,两个应用模块第一第二(其中第二根据第一),以及激活spring.modulith.runtime.flyway-enabled 配置属性spring-doc.cadn.net.cn

有了这些,我们将根据以下方式定制飞航线设置:spring-doc.cadn.net.cn

  • 根迁移文件夹将被更改为数据库/迁移/中__root. 为此,将使用默认的版本跟踪表。spring-doc.cadn.net.cn

  • 其他迁移数据库/迁移/$moduleIdentifier将注册在一个追踪表中flyway_schema_history_$moduleIdentifier. 这些迁移也设置为基线为0,迁移时也设置为基线。spring-doc.cadn.net.cn

  • 以万用卡结尾的迁移位置不会被自定义。spring-doc.cadn.net.cn

注意,迁移脚本中使用的版本号现在实际上作用域限定在应用模块上,不应使用全局排序。spring-doc.cadn.net.cn

通过选择迁移文件放入哪个文件夹,你可以区分始终要执行的迁移和只针对对应模块执行的迁移。应用模块测试集成只执行默认迁移和测试运行中包含的模块迁移。spring-doc.cadn.net.cn