0

我们需要在 grails 应用程序中使用多个数据源。每个用户,即每个 http 会话(从用户登录到注销),应用程序根据用户的请求采用不同的数据源。

http://www.leebutts.com/2008/07/switchable-grails-datasource.html

上面的链接为此提供了一个很好的解决方案。我们已经按照该页面中的说明实施了修改的动态配置。它运行良好。

1)但是这段代码如何将数据源从会话切换到会话?2)ThreadLocal contextHolder这段代码有什么用?

请解释 。. .

谢谢你。

4

1 回答 1

0

Grails 将请求绑定到线程。ThreadLocal变量为访问它的每个线程保存不同的值(允许线程安全而无需同步)。

所以,在他的流程中会发生这样的事情:

  1. 用户在 中选择一个EnvironmentEnvironmentController控制器将其保存到用户的会话中。

  2. beforeFilter查看每个请求并确定Environment用户会话中是否存在。如果是这样,他将 to 设置EnvironmentHolder为指向该环境。由于这是 a ThreadLocal,因此每个线程(在本例中为:请求)都可以拥有自己的值。

  3. dataSourcebean 被访问时,他的SwitchableDatasourcebean 根据EnvironmentHolder'sThreadLocal值中保存的值选择正确的数据源。

于 2013-06-21T14:40:24.677 回答