【问题标题】:Can the Spring AbstractRoutingDataSource work without a default DataSource?Spring AbstractRoutingDataSource 可以在没有默认数据源的情况下工作吗?
【发布时间】:2022-10-26 00:25:10
【问题描述】:

我正在尝试使用 AbstractRoutingDataSource 在 Spring 中实现多租户数据源。我不想要任何默认数据源,因为在我的情况下它不是一个有效的场景。在启动期间,正在调用 determineCurrentLookupKey() (我不知道从哪里开始)。此时我的上下文尚未加载,因此 determineCurrentLookupKey() 返回一个空值,我得到这个异常:

Cannot determine target DataSource for lookup key [null]

有没有解决的办法?谢谢。

【问题讨论】:

  • 您正在使用 JPA,并且正在尝试验证/检查数据库的元数据,因此它需要与数据库的连接,您可以使用休眠属性禁用它。或者,如果您使用 flyway/liquibase 之类的东西来管理也需要连接的数据库。

标签: spring spring-boot spring-mvc spring-data-jpa spring-data


【解决方案1】:

我遇到了同样的问题,添加spring.jpa.properties.javax.persistence.validation.mode=none 对我不起作用...... 实际上,我不确定这是禁用这些验证的一个非常好的解决方案......

但我找到了另一个解决方案!

setLenientFallback(boolean)

公共无效 setLenientFallback(布尔 lenientFallback)

如果没有为当前查找键找到特定的 DataSource,则指定是否对默认 DataSource 应用宽松的回退。 默认值为“true”,接受在目标 DataSource 映射中没有相应条目的查找键 - 在这种情况下只需回​​退到默认 DataSource。

如果您希望仅在查找键为空时应用回退,请将此标志切换为“false”。没有 DataSource 条目的查找键将导致 IllegalStateException。

看起来你也需要:)

但如果查找键为null,则仍将调用默认数据源...

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多