【问题标题】:How to inherit application.properties with spring boot multiple modules如何使用spring boot多个模块继承application.properties
【发布时间】:2020-01-25 06:18:28
【问题描述】:

我使用 spring boot 多个模块,我想从 parent 继承 application.properties。我有父模块:spring-ecommere-demo 和子模块:模型、核心和安全。在父模块中,我将一些配置 jdbc 看起来像:

application.properties(父模块)

spring.datasource.url=jdbc:mysql://localhost:3306/BaoTrung
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.show-sql=true

在子模块安全性中,我的具体配置如下:

application-security.properties(安全模块)

app.jwtSecret= JWTSuperSecretKey
app.jwtExpirationInMs = 604800000

安全模块中 Spring Boot 应用程序中的配置如下所示:

@SpringBootApplication(scanBasePackages = "springecommeredemo")
@PropertySources({
        @PropertySource("application-security.properties")
})

但是当我运行它时,它会抛出异常

说明:

未能配置数据源:未指定“url”属性并且 无法配置嵌入式数据源。

原因:无法确定合适的驱动程序类

行动:

考虑以下几点:如果您想要一个嵌入式数据库(H2、HSQL 或 德比),请把它放在类路径上。如果您有数据库设置 要从特定配置文件加载,您可能需要激活它 (配置文件 dev 当前处于活动状态)。

这意味着子模块安全不能从父项目继承属性。如何从父模块继承所有属性。因为我使用相同的数据库,所以我不想在我的项目中配置重复的 jdbc。我想继承公共属性。请帮助

【问题讨论】:

  • 如果你有一个config-server 为任何microservice 提供配置,就像在这种情况下security 一样,这将很容易实现,那么它将起作用。所以你想做什么我会更好地创造一个答案。
  • @JonathanJohx 谢谢你,请帮助我。如果我理解正确,我需要创建子模块 config-server 并将其依赖于安全性?
  • 您正在使用的架构是micro-service 吗?对吗?
  • @JonathanJohx 是的。正确

标签: java spring maven spring-boot dependency-properties


【解决方案1】:

我使用弹簧靴 2.5。假设我有一个公共模块和一个应用程序模块,它使用公共模块。如果我想访问公共模块属性文件中定义的所有属性,那么我会将以下内容添加到应用程序模块的属性文件的顶部。

spring.config.import=classpath:common-module.properties

您可以为该“通用模块”属性文件指定任何名称。

【讨论】:

    【解决方案2】:

    我在这里找到了解决方案: Maven Multi Module insists on duplicating datasource application.properties in business module

    只创建子模块:example :server-config 并运行它。在子模块中:安全添加 server-config 作为依赖项并运行它。它对我有用

    【讨论】:

      【解决方案3】:

      你需要添加多个Properties才能在Spring中访问,我为@PropertySource添加了重复的注解,因为在Java 8之前如果你需要使用同一个注解的多个实例,它们必须被包装在一个容器中注解。有了Java 8,就不再需要这样了,代码变得更清晰、更易读。

      @SpringBootApplication(scanBasePackages = "springecommeredemo")
      @PropertySource("application.properties")
      @PropertySource("application-security.properties")
      

      【讨论】:

      • 但是当我将 @PropertySource("application.properties") 放入模块安全的 application.class 中时,它抛出异常:在类路径中找不到 application.properties
      • @BaoTrungTran - 您是否将属性保存在 src/main/resources 文件夹本身中?
      • 是的。我将 application.properties 保留在父级(spring-ecommere-demo)而不是子模块(安全性)的类路径中
      猜你喜欢
      • 2016-06-10
      • 2014-06-02
      • 2015-11-03
      • 2017-10-30
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      相关资源
      最近更新 更多