Spring AbstractRoutingDataSource后台线程

时间:2012-06-27 13:06:04

标签: multithreading spring

我们正在构建一个多租户服务器,每个租户都有一个数据库/架构。 为此,我们使用Springs AbstractRoutingDataSource根据租户切换数据源。

租户由servlet过滤器中url的子域确定。 此租户存储在线程本地。

这一切都正常,直到线程启动。 例如,当hibernate搜索重新索引时,它会启动很多线程。

当其中一个线程尝试获取连接时,线程local返回null,我无法确定租户。

有人能指出我解决这个问题的正确方向吗?

2 个答案:

答案 0 :(得分:0)

我通过使用存储我的租户的会话范围的spring bean来修复它。

请参阅link了解样本

答案 1 :(得分:0)

您可以将租户标识符存储在InheritableThreadLocal中。子线程将有权访问相同的ThreadLocal变量,因此将了解租户并使用相同的数据库。