我正在尝试使用多个数据库进行多租户。从chapter开始,我选择了 MultiTenantConnectionProviderImpl 。
这里我有问题。 Eclipse无法找到类 ConnectionProviderUtils 。我正在使用依赖的Maven:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.4.Final</version>
</dependency>
答案 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/