Spring 可切换Grails数据源

Spring 可切换Grails数据源,spring,grails,Spring,Grails,我们需要在grails应用程序中使用多个数据源。每个用户,即每个http会话(从用户登录到注销),应用程序根据用户的请求获取不同的数据源 上面的链接提供了一个很好的解决方案。我们已经实现了页面中所说的,修改了动态配置。它运行良好 1) 但是这段代码如何在会话之间切换数据源呢? 2) ThreadLocal contextHolder在此代码中有什么用途 请解释一下 谢谢。Grails将请求绑定到线程。ThreadLocal变量为访问它的每个线程保存一个不同的值(在不同步的情况下允许线程安全)

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

上面的链接提供了一个很好的解决方案。我们已经实现了页面中所说的,修改了动态配置。它运行良好

1) 但是这段代码如何在会话之间切换数据源呢? 2)
ThreadLocal contextHolder
在此代码中有什么用途

请解释一下


谢谢。

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

因此,在他的流程中发生的是:

  • 用户在
    环境控制器
    中选择一个
    环境
    ,控制器将其保存到用户会话中

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

  • 当访问
    dataSource
    bean时,他的
    SwitchableDatasource
    bean根据
    EnvironmentHolder
    ThreadLocal
    值选择正确的数据源


  • 谢谢你的回答。因此,每次spring在请求处理中需要dataSource时,它都会参考
    SwitchableDatasource
    bean。每个会话返回的数据源都不同。我说得对吗?