【问题标题】:AbstractRoutingDataSource + JPA won't create table except defaultTargetDataSourceAbstractRoutingDataSource + JPA 不会创建除 defaultTargetDataSource 之外的表
【发布时间】:2012-05-12 00:25:56
【问题描述】:

我使用 JPA 注释(Hibernate 实现)来初始化我的数据库模式。我按照文章DYNAMIC DATASOURCE ROUTING 来实现动态数据源路由类。

但是,我有两个数据库(映射 2 个数据源)。我将第一个数据源设置为 defaultTargetDataSource。然后启动我的应用程序。当我的应用程序尝试访问第二个数据源时,它告诉我该表不存在。似乎 AbstractRoutingDataSource 只为默认数据源创建表,而为其他数据源创建表。

有没有办法在所有数据库中创建模式?

PS.我正在使用 AbstractRoutingDataSource 来实现我自己的数据库分片。

【问题讨论】:

  • 我也面临这个问题....你能告诉我你做了什么改变来解决这个问题......
  • 同样的问题,你找到解决办法了吗?
  • 面临同样的问题,任何解决方案请更新

标签: java spring hibernate orm


【解决方案1】:

我猜你使用的是hibenate配置:

spring:
  jpa:
    hibernate:
      ddl-auto: update

将实体更改反映到数据库架构中。只要我们使用配置为在启动时连接的单个数据源,这就可以正常工作。

但是,如果您有多个数据源,则无法使用此功能。 AbstractRoutingDataSource 的一般做法是在启动时没有数据源,但在运行时选择它。

如果你选择一个主数据源,那么它将只应用于主数据源,因为休眠在启动时应用此功能,但不会迁移其余数据库。

要反映对所有数据库的更改,您可以使用数据库迁移工具,例如 Flyway 或 Liquibase。

Flyway 使用 SQL 并且非常易于配置和使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2018-08-14
    • 2022-01-23
    相关资源
    最近更新 更多