【问题标题】:How can I inject properties for test and for main into each sub module of a multi-module gradle spring boot project?如何将 test 和 main 属性注入多模块 gradle spring boot 项目的每个子模块?
【发布时间】:2020-04-03 01:34:48
【问题描述】:

这是我项目的结构。

  • 父代不包含代码。
  • module child1 是一个 Spring Boot 应用程序。
  • 模块 child2、child3 是 jar 库。
  • child1 依赖于 child2 和 child3
parent
      | build.gradle
      | settings.gradle
      | [no code]
child1
      | build.gradle
      | src/
          | main/
              | java/
              | resources/
                  | application.properties
          | test/
              | java/
              | resources/
                  | application.properties
child2
      | build.gradle
      | src/
          | main/
              | java/
          | test/
              | java/
child3
      | build.gradle
      | src/
          | main/
              | java/
          | test/
              | java/

我有一个名为“datapath”的属性,我想将它注入到每个模块的类中。
“数据路径”有两种可能的值,一种用于测试,一种用于生产。
我将生产价值设置为 child1/src/main/resources/application.properties 和测试值 child1/src/test/resources/application.properties

我已尝试创建配置类并指定 PropertySource。 但是结果是,虽然 child1 在 test 和 main 中都选择了正确的应用程序属性,但是 spring 在其他模块中却没有找到它们。

你能为我提出一个实施策略吗?

特别是:

  1. child1 中的测试带有注解 SpringBootTest 但最好 child2 和 child3 不应依赖于 spring boot(只是用于自动装配的 spring 框架)
  2. 我希望能够在子模块中的配置类上使用@Value 注解。
  3. 如何指示 spring 从 child1 模块中的 application.properties 解析这些属性,使用 src/test/resources 中的一个进行测试,使用 src/main/resources 中的一个进行生产?
  4. 由于我选择了一个非常“经典”的结构,我希望能够用尽可能少的活动部件来实现这一点。特别是我不希望在注释中明确指定路径。

【问题讨论】:

    标签: java spring spring-boot multi-module


    【解决方案1】:

    我假设在child2child3 中,您需要application.properties 仅用于测试。然后在测试中您可以使用@TestPropertySource,您可以在child1 中指向属性文件的相对路径或显式添加datapath

    @TestPropertySource(properties = { "datapath=value" })
    public class Child2Test {
    

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 2018-10-07
      • 1970-01-01
      • 2019-02-18
      • 2018-03-28
      • 2016-06-11
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多