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

时间:2012-05-02 13:58:55

标签: java spring hibernate orm

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

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

有什么想法在所有数据库中创建模式吗?

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

1 个答案:

答案 0 :(得分:0)

我猜您正在使用hibenate配置:

spring:
  jpa:
    hibernate:
      ddl-auto: update

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

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

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

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

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