模块配置文件

一个 SOFABoot 工程可以包含多个模块,每个模块主要包括下述 2 个部分:

  • 一个普通的 JAR 包。内容包括:

    • Java 代码

    • Spring 配置文件

    • SOFABoot 子模块标识

  • SOFABoot 特有的配置。这些特有的配置,让一个 JAR 包能够被 SOFABoot 识别,使之具备模块化的能力。主要包含下述 2 部分内容:

    • properties 配置文件。说明如下:

      • 路径:位于可部署模块的 resources 目录下。可部署模块指使用 spring-boot-maven-plugin 打包的模块。

      • 命名规则:采用固定名称 sofa-module.properties

      • 配置内容:主要配置 SOFABoot 模块的名称以及模块之间的依赖关系。

    • Spring 配置文件。说明如下:

      • 路径:位于 SOFABoot 模块的 META-INF/spring 目录下。新建工程默认无 spring 文件夹,需用户创建。

      • 数量:可以配置任意多的 Spring XML 配置文件。SOFABoot 会自动把它们作为本模块的 Spring 配置加载起来。

sofa-module.properties 文件详解

sofa-module.properties 的配置内容,示例如下:

Module-Name=com.alipay.test.biz.service.impl
Spring-Parent=com.alipay.test.common.dal
Require-Module=com.alipay.test.biz.shared
Module-Profile=dev

对配置文件中待配置属性对应的键,说明如下:

  • Module-Name

    • Module-Name 是 SOFABoot 模块的名称,也是 SOFABoot 模块的唯一标识符。

    • 值的唯一性要满足下述条件:

      • 在一个 SOFABoot 工程中,不同模块的 Module-Name 不得重复。

      • 如果依赖了其它工程的 SOFABoot 模块,则也不能和所依赖工程中的模块同名。

  • Spring-Parent

    • 各个模块都有一个 Spring 上下文,且彼此隔离。

    • Spring-Parent 主要用来打通 2 个你期望打通的模块的 Spring 上下文。

    • 由于 Spring 的限制,一个模块的 Spring-Parent 只能有一个模块。故而在 SOFABoot 中,当一个模块 A 的 Spring-Parent 设置为另外一个模块 B,则 A 的 Spring-Parent 不再是根上下文 Root ApplicationContext , 但是最终还是间接依赖到了根上下文,也能间接访问根上下文中的 Bean。

    • 关于 Spring-Parent 的作用,可参考 Spring 的 BeanFactory 说明(英文)

  • Require-Module

    • Require-Module 用于定义模块之间的依赖顺序,值是以逗号分隔的 SOFABoot 模块名列表。

    • 属性值对应的模块会先于属性键对应的模块。

    • 一般情况下,是不需要为模块配置该属性值,只有当 Spring 上下文有依赖关系时,才配置该键。

    • 配置示例: Require-Module=com.alipay.test.biz.shared 表示下述含义:

      • 本模块依赖于 com.alipay.test.biz.shared 模块。

      • com.alipay.test.biz.shared 模块将先于本模块启动 Spring 上下文。

    • 应用示例:您在 A 模块中发布了一个 SOFA JVM Service。在 B 模块的某一个 Bean 的 init 方法里面,需要使用 SOFA Reference 调用这个 SOFA JVM Service。

      • 假设 B 模块在 A 模块之前启动了,那么 B 模块的 Bean 就会因为 A 模块的 JVM Service 没有发布而 init 失败,从而导致 Spring 上下文启动失败。

      • 此时可以使用 Require-Module 来强制 A 模块在 B 模块之前启动。

  • Module-Profile:支持 SOFABoot Profile 能力,详情参见 模块激活配置