动态多数据源切换
最后更新:2023-11-28 18:36:43
|
状态:未完成
文档中有错误或没说明白的请到【群】里说一下,多谢指正
文档中有错误或没说明白的请到【群】里说一下,多谢指正
多数据源,是多个完全不同的数据源,而不是主从关系
动态切换,是指在运行过程中注册数据源和切换数据源,经常需要在同一个方法中操作不同的数据源,通过切面方式满足不了的场景才需要这样切换。
如果是在同一台服务器上的多个库,可以使用同一个数据源,查询时加数据库前缀,如MySQL中可以SELECT * FROM erp.CRM_USER,(当然需要这个帐号有权限访问)
动态数据源的场景:
一般是在系统运行时注册和切换数据源,典型场景如数据中台,用户通过管理端提交第三方数据库的地址帐号,中台汇聚多个数据源的数据
这种情况下显示不是在配置文件中添加多个数据源,需要在接收到用户提交数据后,生成数据源并交给spring管理
在切换数据源时也无法通过切面来实现,而是根据用户身份等上下文环境来切换
默认情况下注册了多数据源时,会同时添加相应的事务管理器,这样在spring上下文环境中就会存在多个事务管理器的实例,所以通过注解管理事务时会出异常,因为spring不知道要用哪个事务管理器
可以把ConfigTable.IS_OPEN_TRANSACTION_MANAGER = false 禁用针对anyline创建的数据源的事务管理器,或参考【多数据源注解事务异常】
数据源中出现的数据库类型需要先添加相应的依赖和驱动,
如mysql需要
org.anyline:anyline-data-jdbc-mysql
mysql:mysql-connector-java
neo4j需要
org.anyline:anyline-data-jdbc-neo4j
org.neo4j:neo4j-jdbc-driver
【示例源码】看其中的anyline-simple-data-jdbc-ds