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

我在三个不同的数据源中有使用数据源路由的项目 spring-boot。


这是我的配置:


@Configuration

@EnableCaching

public 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 或我的代码是坏的?


沧海一幻觉
浏览 207回答 1
1回答

呼唤远方

出现此问题的原因可能是服务器线程池:您有给定数量的线程,并且每个请求都在它们之间滚动。当服务器回收一个线程时,线程局部变量已经从前一个循环设置了该值,因此您需要在每次请求后刷新该值,使线程处于干净状态。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java