Spring启动application.properties maven多模块项目

时间:2014-04-17 16:21:26

标签: spring hibernate maven spring-boot

我们在多模块项目中使用spring boot。

我们有一个域访问模块,它具有公共域对象类,存储库以及数据源,JPA,Hibernate等的配置。这些是使用application.properties配置的。我们将所有这些配置放入通用模块中,以便在更高级别的模块中保存重复这些常见配置。

这在构建域模块时工作正常,因此配置在测试单元中正确加载。

然而,当我们尝试在更高层模块中使用域模块时,问题就开始了;他们有自己的application.properties,这意味着Spring加载它们而不是Domain模块application.properties,这意味着没有配置数据源,因为只加载了更高模块的application.properties。

我们想要的是Spring加载的域模块和更高级别的应用程序属性。但我们无法轻易做到这一点。

我认为这一定是一个常见问题,并想知道是否有针对此问题的推荐解决方案?

由于我们使用spring-boot,理想情况下解决方案应使用注释而不是applictionContext.xml。

5 个答案:

答案 0 :(得分:7)

也许您应该只在顶级聚合器项目中使用application.properties

您始终可以在子项目中使用@PropertySource来使用特定于其用例的名称对其进行配置。

或者您可以为每个项目使用不同的名称,并使用spring.config.location(逗号分隔)在顶级项目中将它们粘合在一起。

答案 1 :(得分:6)

我同意@Dave Syer。将应用程序拆分为多个模块的想法是每个模块都是一个独立的单元,在本例中是一个jar文件。从理论上讲,您可以将每个jar文件拆分为自己的源存储库,然后在多个项目中使用它们。假设您希望在Web和批处理应用程序中重用这些域类,如果所有APPLICATION级别配置都存储在每个单独的模块中,则会严重降低其可重用性。

IMO只有聚合模块应包含作为应用程序运行所需的所有配置,其他所有内容都只是一个可以根据需要重新混合和重用的依赖项。

答案 2 :(得分:4)

也许另一种方法可能是为每个模块定义特定的配置文件,并使用application.properties文件来指定女性配置文件处于活动状态 使用spring.profiles.include属性。

domain-module
- application.properties
- application-domain.properties

app-module
- application.properties
- application-app.properties

并进入app-module

的application.properties文件
spring.profiles.include=domain,app

答案 3 :(得分:2)

您可以做的另一件事(除了在Dave Syer提到的顶层使用application.properties之外)就是将域模块的属性文件命名为domainConfig.properties

这样可以避免名称与application.properties冲突。

domainConfig.properties将包含域模块能够在其上进行测试所需的所有数据。可以使用多个@PropertySource(一个用于domainConfig.properties和一个用于application.properties)或在Java Config中配置PropertySourcesPlaceholderConfigurer bean轻松完成与其余代码的集成(查看this教程)引用所有需要的属性文件

答案 4 :(得分:0)

在 spring-boot 中,因为 2.4 支持 spring.config.import

例如

application.name=myapp
spring.config.import=developer.properties

# import from other module
spring.config.import=classpath:application-common.properties

或使用 spring.config.activate.on-profile

spring.config.activate.on-profile=prod
spring.config.import=prod.properties

参考:https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4