繁体   English   中英

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

[英]Multi-tenancy in Hibernate - multi databases (SQLite)

我正在尝试对多个数据库进行多租户。 本章开始,我学习了MultiTenantConnectionProviderImpl

我这里有问题。 Eclipse找不到类ConnectionProviderUtils 我正在使用Maven与依赖项:

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

我不想让你失望,但不久前我遇到了同样的问题。 关键是ConnectionProviderUtil在文档中相当容易引起误解。 哪有这回事。 ConnectionProviderUtil是您必须自己实现的东西。 我通过在MultiTenantConnectionProvider中构造自己的DataSource (一个c3p0池化的)并从那里分发连接来实现此目的。

因此,您必须从头开始实施它。 供参考,这是我寻求解决方案的方法。 使用Hibernate 4.2和Spring 3.1.1设置MultiTenantConnectionProvider

对于多数据库方法,您可以将不同的DataSourcesMultiTenantConnectionProvider ,然后根据MultiTenantConnectionProvider进行切换。 请参阅此答案以获取更多详细信息: https : //stackoverflow.com/a/16769595/2319179

编辑:如果您使用Spring,则可以在appcontext中设置数据源,如下所示:

<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>"));

快速的googlesearch应该会找到合适的驱动程序。

ConnectionProvider是用于自定义获取连接的策略的工具。 只要所有模式都相同,这就是实现多租户的最佳场所之一。

ConnectionProvider ,您将需要一个ThreadLocal来保存“租期”,可能还需要一个ServletFilter来进行设置(来自会话变量,在登录时设置)。 这类似于Spring的OpenSessionInViewFilter工作方式。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM