采取spring + hibernate 组成动态多数据源(每个库的表结构相同)。
现程序升级需要对数据库表结构进行更改,将hibernate 的hibernate.hbm2ddl.auto 配置为update,结果只能修改defaultTargetDataSource 所连接的一个库。
求有可以使hibernate.hbm2ddl.auto 自动更新所有的库解决方案。
补充:是一个sessionFactory(org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean)对应N个dataSource。
如使用脚本修改,将一个长期痛苦的过程。现在是有五十个库*3个环境。
spring hibernate 动态数据源 同步所有库的表结构问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-13 21:53关注
可以使用 Spring 的 AbstractRoutingDataSource 来实现动态切换数据源,并在其中使用 Hibernate 的 SchemaUpdate 来对所有数据源进行更新。
首先,实现一个继承 AbstractRoutingDataSource 的类,在其中实现 determineCurrentLookupKey() 方法,用于动态切换数据源。
然后,在配置文件中,配置 Hibernate 的 SchemaUpdate 和 AbstractRoutingDataSource 的 Bean。在执行 SchemaUpdate 时,动态切换数据源并执行更新操作。
如果表结构完全相同可以在程序运行时,通过循环切换数据源,对每一个数据源执行更新操作。
为了避免每次都通过循环切换数据源来更新,可以使用数据库连接池管理所有数据源。
如果使用Spring boot,可以使用Flyway 或者 Liquibase来管理数据库版本更新。
解决 无用评论 打赏 举报