我们有个业务逻辑比较复杂,既要读取主库的数据又要读取分库分表的数据,在控制器类方法中加这个注解导致数据库无法正确访问?我加到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技术社区 移动端