[英]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
对于多数据库方法,您可以将不同的DataSources
到MultiTenantConnectionProvider
,然后根据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.