我在三个不同的数据源中有使用数据源路由的项目 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 或我的代码是坏的?
呼唤远方
相关分类