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来管理数据库版本更新。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大