多模块maven项目中的Spring启动配置

时间:2016-01-22 08:09:18

标签: java spring spring-boot

我在为多模块maven项目正确设置弹簧启动时遇到问题。

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

然而,负责发送电子邮件的类位于“核心”包中。当我尝试构建该模块时,构建失败,因为无法找到JavaMailSender的实现。

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

这次核心模块构建成功,但“api”由于相同的异常而无法构建,所以我想我刚刚解决了这个问题。

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

4 个答案:

答案 0 :(得分:5)

我在另一个堆栈溢出问题中找到了答案: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)。请注意,此时@PropertySource不适用于yaml配置文件。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您的API的pom.xml必须具有CORE模块的依赖性。

答案 3 :(得分:0)

解决方案是在Starter类中将属性文件定义为@PropertiesSource的值。 但是最好将“ classpath:”放在属性文件后面。 例如,在Intellij想法中,在文件名后面添加了“ classpatch:”一词之后,值就变成了链接。像这样:

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

希望对您有所帮助。