【问题标题】:Spring boot configuration in a multi-Module maven project多模块 Maven 项目中的 Spring Boot 配置
【发布时间】:2016-04-28 18:25:04
【问题描述】:

我在为我的多模块 maven 项目正确设置 spring boot 时遇到问题。

有一个模块“api”使用另一个模块“core”。 Api 有一个 application.properties 文件,其中包含 spring.mail.host=xxx。根据 spring boot 文档,这为您提供了 JavaMailSender 接口的默认实现,可以自动装配。

但是,负责发送电子邮件的类驻留在“核心”包中。当我尝试构建该模块时,构建失败,因为找不到 JavaMailSender 的实现。

我当时的猜测是邮件配置应该驻留在单独的 application.properties 中的“核心”中。我创建了它并将 spring.mail.host 属性从“api”移动到“core”属性文件。

这次核心模块构建成功,但是“api”因为同样的异常而构建失败,所以我想我只是移动了问题。

我不太了解处理此类情况所需的结构,所以我想知道正确的方法是让“核心”模块包含所有正确的配置以发送邮件并让其他模块使用邮件驻留在其中的代码和配置。

【问题讨论】:

  • 您能发布堆栈跟踪吗?

标签: java spring spring-boot


【解决方案1】:

我在另一个堆栈溢出问题中找到了答案:How to add multiple application.properties files in spring-boot?

事实证明,spring boot 创建的最终 jar 中只能有 1 个 application.properties 文件。要拥有多个文件,您必须将其中一个文件重命名为自定义文件。我将核心模块的属性命名为“core-application.properties”。

然后在 API 模块中我将这个添加到 spring boot 应用程序类中:

@SpringBootApplication
@PropertySource(value = {"core-application.properties", "application.properties"})

这样做我可以正确使用基本属性文件并在更具体的模块中覆盖它们。此外,您仍然可以使用此设置创建特定于配置文件的属性文件(core-application-production.properties),无需手动将它们添加到属性源)。请注意,@PropertySource 目前不适用于 yaml 配置文件。

【讨论】:

【解决方案2】:

每个项目有一个有效的application.properties。您只需保留 2 个属性文件即可成功构建。

当api模块使用core模块时,核心模块中的application.properties会被api覆盖。

【讨论】:

    【解决方案3】:

    你的 API 的 pom.xml 必须有 CORE 模块的依赖。

    【讨论】:

      【解决方案4】:

      解决方案是在 Starter 类中将属性文件定义为 @PropertiesSource 的值。 但最好将“类路径:”放在属性文件后面。 例如在 Intellij IDEA 中,在文件名后面添加“classpatch:”字样后,值变为链接。像这样:

      @SpringBootApplication
      @PropertySource(value = {"classpath:core-application.properties", "classpath:application.properties"})
      

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2016-03-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        相关资源
        最近更新 更多