在我们的项目中用到了动态数据源来实现跨库数据操作,我的基础框架整合了baomidou开源的动态数据源组件dynamic-datasource-spring-boot-starter,在开发环境使用mysql数据库调试一切正常,顺利通过自测。但是发布测试环境后,由于需要使用人大金仓数据库KingbaseES-V8,于是出现了一些问题。
1、首先是我们自定义的sys_user表,对用户数据进行存储,但是访问金仓数据库查询数据的时候就提示找不到sys_user关系,然后查了一堆资料,是说金仓数据库自带了sys_user表,然后访问模式优先级要高于用户自定义的数据库sys_user表,需要设置一下忽略系统自带的表,设置如下:
alter system set search_path = “$USER”, PUBLIC,SYS_CATALOG;
select sys_reload_conf(); #这个语句是让上面的命令生效的。
根据上面操作后,还是没有解决问题,然后提示user_id字段不存在
我就纳闷了,怎么用户表找到了字段却没有呢?
2、原来在我们业务方法中添加了事务,但是业务方法里是需要跨库操作,一个去用户库查询用户,一个去业务库存储数据,但是使用的注解是:@Transactional,就是这个注解导致在切换数据源时失败了,导致一直在业务库查询用户表,就一直提示用户表的user_id字段不存在。然后通过查看文档,改为@DSTransactional注解对动态数据源进行事务管理,实现了分布式事务处理,成功切换数据源,问题才真正解决了。