首页 文章

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

提问于
浏览
25

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

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

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

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

我们想要的是Spring模块和更高级别的应用程序属性 . 但我们看不到任何简单的方法来做到这一点 .

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

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

4 回答

  • 4

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

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

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

  • 4

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

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

  • 1

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

    这样你就避免了与 application.properties 的名字冲突 .

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

  • 1

    也许另一种方法可能是为每个模块定义特定的配置文件,并使用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
    

相关问题