【问题标题】:Switchable Grails DataSource可切换的 Grails 数据源
【发布时间】:2013-06-21 22:40:24
【问题描述】:

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

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

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

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

请解释一下。 . .

谢谢。

【问题讨论】:

    标签: spring grails


    【解决方案1】:

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

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

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

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

    3. 当访问dataSource bean 时,他的SwitchableDatasource bean 根据EnvironmentHolderThreadLocal 值中保存的值选择正确的数据源。

    【讨论】:

    • 感谢您的回答。因此,每次spring在请求处理中需要dataSource时,都会查询SwitchableDatasource bean。每个会话返回的数据源都不同。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2011-02-20
    • 2017-06-12
    相关资源
    最近更新 更多