为了账号安全,请及时绑定邮箱和手机立即绑定

多个数据源多次访问中的数据源路由器问题

多个数据源多次访问中的数据源路由器问题

沧海一幻觉 2021-09-29 17:33:53
我在三个不同的数据源中有使用数据源路由的项目 spring-boot。这是我的配置:@Configuration@EnableCachingpublic class CachingConfiguration extends CachingConfigurerSupport {    @Override    public KeyGenerator keyGenerator() {        return new EnvironmentAwareCacheKeyGenerator();    }}——public class DatabaseContextHolder {    private static final ThreadLocal<DatabaseEnvironment> CONTEXT =        new ThreadLocal<>();    public static void set(DatabaseEnvironment databaseEnvironment) {        CONTEXT.set(databaseEnvironment);    }    public static DatabaseEnvironment getEnvironment() {        return CONTEXT.get();    }    public static void clear() {        CONTEXT.remove();    }}我使用 DatabaseContextHolder.set(DatabaseEnvironment.CICLOCAIRU); 设置数据源;转到问题:例如,不同数据源中的两个用户:1 和 2如果一个用户使用数据源 1,并发送请求,另一个用户使用数据源 2,您的下一个请求,而不是数据源 2,这将获得数据源 1。我认为这 ThreadLocal<DatabaseEnvironment> CONTEXT =        new ThreadLocal<>();是请求专用的,但这似乎不是所以。如果不清楚,我很抱歉。实际上,我需要 DataSurceRouter 对每个请求都是独占的,并且一个请求不会干扰另一个请求。我错了我认为 DatasourceRouter 或我的代码是坏的?
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

出现此问题的原因可能是服务器线程池:您有给定数量的线程,并且每个请求都在它们之间滚动。

当服务器回收一个线程时,线程局部变量已经从前一个循环设置了该值,因此您需要在每次请求后刷新该值,使线程处于干净状态。


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信