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

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

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

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

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

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

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

我在另一个堆栈溢出问题中找到了答案: 如何在spring-boot中添加多个application.properties文件?

事实certificate,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配置文件。

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

api模块使用core模块时, core模块中的application.propertiesapi覆盖。

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