我在三个不同的数据源中有使用数据源路由的项目 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个赞
出现此问题的原因可能是服务器线程池:您有给定数量的线程,并且每个请求都在它们之间滚动。
当服务器回收一个线程时,线程局部变量已经从前一个循环设置了该值,因此您需要在每次请求后刷新该值,使线程处于干净状态。
添加回答
举报
0/150
提交
取消