可切换的Grails DataSource

时间:2013-06-21 04:13:14

标签: spring grails

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

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

以上链接为此提供了一个很好的解决方案。我们已经在该页面中实现了改进的动态配置。它运行良好。

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

请解释一下。 。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

所以,在他的流程中会发生什么:

  1. 用户在Environment中选择EnvironmentController,控制器会将其保存到用户的会话中。

  2. beforeFilter他查看了每个请求,并确定用户会话中是否有Environment。如果是这样,他将EnvironmentHolder设置为指向该环境。由于这是一个ThreadLocal,每个线程(在这种情况下:请求)都可以拥有它自己的值。

  3. 访问dataSource bean时,他的SwitchableDatasource bean根据EnvironmentHolder的{​​{1}}值中保存的值选择正确的数据源。 / p>