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

MAG*_*Gx2 2 java hibernate

我正在尝试使用多个数据库进行多租户。从本章开始,我采用了MultiTenantConnectionProviderImpl

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

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.4.Final</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 5

我不想让你失望,但不久前我遇到了同样的问题。关键是 ConnectionProviderUtil 在文档中非常具有误导性。哪有这回事。ConnectionProviderUtil 是您必须自己实现的东西。我通过DataSource在 MultiTenantConnectionProvider 中构建我自己的(一个 c3p0 池)并从那里分发连接来实现这一点。

所以你必须自己从头开始实现它。作为参考,这里是我解决方案的方式。使用 Hibernate 4.2 和 Spring 3.1.1 设置 MultiTenantConnectionProvider

对于多 DB 方法,您可以根据 TenantIdentifier将不同的数据自动连接DataSourcesMultiTenantConnectionProvider和 switch 中。有关更多详细信息,请参阅此答案: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>
Run Code Online (Sandbox Code Playgroud)

如果您需要从 Java 构建它,您可以这样做:

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

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