Hibernate中的多租户 - 多数据库(SQLite)

时间:2013-05-28 11:59:18

标签: java hibernate

我正在尝试使用多个数据库进行多租户。从chapter开始,我选择了 MultiTenantConnectionProviderImpl

这里我有问题。 Eclipse无法找到类 ConnectionProviderUtils 。我正在使用依赖的Maven:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.4.Final</version>
    </dependency>

2 个答案:

答案 0 :(得分:4)

我讨厌让你失望,但我一时间遇到了同样的问题。关键是ConnectionProviderUtil在文档中有很多误导性。哪有这回事。 ConnectionProviderUtil是您必须自己实现的。我通过在MultiTenantConnectionProvider中构建我自己的DataSource(一个c3p0池化的)并从那里分发连接来实现这一点。

所以你必须自己从头开始实现它。这里是我的解决方案。 Setting up a MultiTenantConnectionProvider using Hibernate 4.2 and Spring 3.1.1

对于多数据库方法,您只需将不同的DataSources自动装入MultiTenantConnectionProvider并根据TenantIdentifier进行切换。有关详细信息,请参阅此答案:https://stackoverflow.com/a/16769595/2319179

修改 如果你使用Spring,你可以在appcontext中设置一个DataSource,如下所示:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="<jdbcdriver>" />
            <property name="url" value="jdbc:SQLServer://<host>:<port>;databaseName=<dbname>" />
            <property name="username" value="<user>" />
            <property name="password" value="<pw>" />
       </bean>

如果你需要从java构建它,你可以这样做:

        cpds = new DriverManagerDataSource();
cpds.setDriverClass(<jdbc.driver>);
cpds.setJdbcUrl(<jdbc.url>);
cpds.setUser("<user>");
cpds.setPassword("<pw>"));

快速谷歌搜索应该提出正确的驱动程序。

答案 1 :(得分:0)

ConnectionProvider是您用来自定义获取连接的策略的方法。如果所有模式都相同,这是实现多租户的最佳场所之一。

ConnectionProvider一起,您需要ThreadLocal来保持&#34;租约&#34;并且可能是ServletFilter来设置它(来自会话变量,在登录时设置)。这类似于Spring OpenSessionInViewFilter的工作方式。

总而言之,这可以提供一个非常简单的&amp;有效的解决方案:

http://literatejava.com/hibernate/multi-tenancy-architecture-with-hibernate/