适用于多数据库Grails应用程序的Spring或Hibernate多租户

Dan*_*iel 4 grails spring hibernate multi-tenant multi-database

Grails有一个用于单个数据库的多租户插件和一个用于多个数据库的多租户插件,但不再支持/维护多个数据库的插件.有没有什么方法可以将Spring或Hibernate本身用于多租户多数据库Grails应用程序?

Mas*_*ave 9

您可以使用此处描述的Hibernate多租户http://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch16.html

要么

您还可以考虑Spring的AbstractRoutingDataSource

一般的想法是路由DataSource充当中介 - 而'真实'DataSource可以在运行时基于查找键动态确定.

https://spring.io/blog/2007/01/23/dynamic-datasource-routing/

您可以找到一个较新的帖子,给出一个示例性的hibernate用法,您可以在以下两个片段中找到解决方案的要点

public class MyRoutingDataSource extends AbstractRoutingDataSource{
    @Override
    protected Object determineCurrentLookupKey() {
        String language = LocaleContextHolder.getLocale().getLanguage();
        System.out.println("Language obtained: "+ language);
        return language;
    }
}
Run Code Online (Sandbox Code Playgroud)

返回值将用作数据源的鉴别器,以下配置设置映射

<bean id="dataSource" class="com.howtodoinjava.controller.MyRoutingDataSource">
   <property name="targetDataSources">
      <map key-type="java.lang.String">
         <entry key="en" value-ref="concreteDataSourceOne"/>
         <entry key="es" value-ref="concreteDataSourceTwo"/>
      </map>
   </property>
</bean>
Run Code Online (Sandbox Code Playgroud)