HintManager强制路由在同一请求不同线程中如何透传

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:

org.apache.shardingsphere
sharding-jdbc-spring-namespace
4.1.1

场景、问题:

HintManager强制路由在一次请求中,遇到异步调用时,HintManager内部是通过hreadLocal实现的,导致异步线程中无法获取分片内容,导致无法调用hit式路由算法(HintShardingAlgorithm),这个怎么处理

已进行操作:

已解决父子线程共享变量问题,但是不想每次都在子线程中重写hintManager = HintManager.getInstance();,进行分片设置

现状:

ShardingSphere 5.3.x 已支持使用注释方式的 SQL Hint,不必通过 threadLocal 传递参数。
可以尝试一下最新版本。

问题的核心点,异步怎么优雅的使用,难道每个都要异步线程都要编程式指定分片,就算可以可以通过注解,可以解决异步获取分片的问题吗

Hint 策略本身就依赖外部传递值,至于这个值是通过怎样的线程传递而来的,这超出了 SS 的控制范围。

为啥不集成阿里的transmittable-thread-local的jar,解决异步线程或者线程池透传问题,这样HIT的策略值就可以直接透传啦,不用硬编码在在异步线程中

SS 项目中已经依赖了 transmittable-thread-local,如果有类似的需求是可以直接使用的

京ICP备2021015875号