如何根据租户在运行时选择弹簧配置?
我希望能够根据用户在运行时所属的租户选择特定的Spring(或Grails)上下文配置.假设我使用Spring Security并在登录期间检索tenantId.
编辑: 最佳答案
几年前我们需要这样的东西,但仅限于DataSources和ViewResolvers.我们使用spring’TargetSource解决方案开发了一个解决方案(最初我们使用了HotswappableTargetSource,但这对我们的用例来说还不够.
我们开发的代码在多租户目录中可用于here. 它完全可配置且灵活. 基本上你要做的就是配置一个ContextSwappableTargetSource并告诉它需要返回什么类型的接口/类.
默认是基于tenantId在ApplicationContext中查找bean(请参阅BeanFactoryTargetRegistry).但是,您可以指定其中的一个或多个(我们使用JndiLookupTargetRegistry动态查找数据源,这允许在不重新启动应用程序的情况下动态添加租户). 如果显式配置BeanFactoryTargetRegistry,则可以添加前缀和后缀.
现在,对于foo,它将查找名为fooExchangeService的bean和bar barExchangeService. tenantId存储在ThreadLocal中,该ThreadLocal包含在ContextHolder中.你需要找到一种填充和清除本地线程的方法(一般来说,servlet Filter就是这样做的. 在您的代码中,您现在可以简单地使用ExchangeService接口,并在运行时基于tenantId查找正确的实现. 另见http://mdeinum.wordpress.com/2007/01/05/one-application-per-client-database/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |