我们正在构建一个多租户服务器,每个租户都有一个数据库/架构。 为此,我们使用Springs AbstractRoutingDataSource根据租户切换数据源。
租户由servlet过滤器中url的子域确定。 此租户存储在线程本地。
这一切都正常,直到线程启动。 例如,当hibernate搜索重新索引时,它会启动很多线程。
当其中一个线程尝试获取连接时,线程local返回null,我无法确定租户。
有人能指出我解决这个问题的正确方向吗?
答案 0 :(得分:0)
我通过使用存储我的租户的会话范围的spring bean来修复它。
请参阅link了解样本
答案 1 :(得分:0)
您可以将租户标识符存储在InheritableThreadLocal
中。子线程将有权访问相同的ThreadLocal变量,因此将了解租户并使用相同的数据库。