我们有个业务逻辑比较复杂,既要读取主库的数据又要读取分库分表的数据,在控制器类方法中加这个注解导致数据库无法正确访问?我加到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(); }
作者追问:2025-07-04 18:27
用这个方式可以处理,但是主方法加了注解事务@Transactional后,这个方法就不生效了
回答:
2025-07-04 22:14
开启了事务后,spring事务管理器会保证在事务下整个线程后续拿到的都是同一个connection。所以就会失效了。
如果你要这种情况下支持事务,需要接入seata使用,但是建议你去重新设计业务模型,避免这种情况发生。
讨论(0)
- 热议问题
-
初次登录出现 认证信息错误或无效
1
-
测试签名认证失败
1
-
pom版本问题
2
-
如何自定义登录逻辑?
2
-
登录界面增加记住用户名密码功能
2
-
/blade-auth/oauth/token登录接口变得很慢
1
-
找不到版本号?
1
-
设备链接物联网平台的mqtt服务
1
-
字典code不可编辑的限制取消
1
-
商业版的springboot 最新版本登录的时候出现 请求未授权...是还要在哪儿配置什么吗?
1
扫一扫访问 Blade技术社区 移动端