yangzhiqi07 2013-08-30 09:12 采纳率: 0%
浏览 1089

spring hibernate 动态数据源 同步所有库的表结构问题

采取spring + hibernate 组成动态多数据源(每个库的表结构相同)。
现程序升级需要对数据库表结构进行更改,将hibernate 的hibernate.hbm2ddl.auto 配置为update,结果只能修改defaultTargetDataSource 所连接的一个库。
求有可以使hibernate.hbm2ddl.auto 自动更新所有的库解决方案。
补充:是一个sessionFactory(org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean)对应N个dataSource。
如使用脚本修改,将一个长期痛苦的过程。现在是有五十个库*3个环境。

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-13 21:53
    关注

    可以使用 Spring 的 AbstractRoutingDataSource 来实现动态切换数据源,并在其中使用 Hibernate 的 SchemaUpdate 来对所有数据源进行更新。


    首先,实现一个继承 AbstractRoutingDataSource 的类,在其中实现 determineCurrentLookupKey() 方法,用于动态切换数据源。


    然后,在配置文件中,配置 Hibernate 的 SchemaUpdate 和 AbstractRoutingDataSource 的 Bean。在执行 SchemaUpdate 时,动态切换数据源并执行更新操作。


    如果表结构完全相同可以在程序运行时,通过循环切换数据源,对每一个数据源执行更新操作。


    为了避免每次都通过循环切换数据源来更新,可以使用数据库连接池管理所有数据源。


    如果使用Spring boot,可以使用Flyway 或者 Liquibase来管理数据库版本更新。

    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 如何用visual studio code实现html页面
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?