AbstractRoutingDataSource + JPA不会创建除defaultTargetDataSource之外的表

Ben*_*Ben 5 java orm spring hibernate

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

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

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

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

小智 1

我猜你正在使用 hibenate 配置:

spring:
  jpa:
    hibernate:
      ddl-auto: update
Run Code Online (Sandbox Code Playgroud)

以反映对数据库模式的实体更改。只要我们使用配置为在启动时连接的单个数据源,这种方法就可以正常工作。

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

如果您选择主数据源,则它将仅应用于主数据源,因为 hibernates 在启动时应用此功能,但其余数据库将不会被迁移。

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

Flyway 使用 SQL,非常容易配置和使用。