我们有个业务逻辑比较复杂,既要读取主库的数据又要读取分库分表的数据,在控制器类方法中加这个注解导致数据库无法正确访问?我加到Service类中,访问数据库报 Unknown exception: class java.lang.Long cannot be cast to class java.lang.String (java.lang.Long and java.lang.String are in module java.base of loader 'bootstrap')
多种数据库调用放到一个接口里,如果切换sharding,要按照这种形式来,就不能再用注解了
//业务内部方法
try {
DynamicDataSourceContextHolder.push("sharding");
//这里写你的逻辑
} catch (Exception exception) {
throw new Exception(exception.getMessage());
} finally {
DynamicDataSourceContextHolder.poll();
}
用这个方式可以处理,但是主方法加了注解事务@Transactional后,这个方法就不生效了
开启了事务后,spring事务管理器会保证在事务下整个线程后续拿到的都是同一个connection。所以就会失效了。
如果你要这种情况下支持事务,需要接入seata使用,但是建议你去重新设计业务模型,避免这种情况发生。
扫一扫访问 Blade技术社区 移动端