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

Java Hibernate中的多租户-多数据库(SQLite),java,hibernate,Java,Hibernate,我正在尝试使用多个数据库进行多租户。由此,我获得了多租户连接提供者mpl 这里我有个问题。Eclipse找不到类ConnectionProviderUtils。我将Maven与依赖项一起使用: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <versi

我正在尝试使用多个数据库进行多租户。由此,我获得了多租户连接提供者mpl

这里我有个问题。Eclipse找不到类ConnectionProviderUtils。我将Maven与依赖项一起使用:

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

org.hibernate
冬眠核心
4.1.4.最终版本

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

因此,您必须自己从头开始实施它。作为参考,这里是我解决问题的方法

对于多数据库方法,您只需将不同的
数据源
自动连接到
多租户连接提供程序
,并根据租户标识符进行切换。有关更多详细信息,请参阅此答案:

编辑: 如果使用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>
        cpds = new DriverManagerDataSource();
cpds.setDriverClass(<jdbc.driver>);
cpds.setJdbcUrl(<jdbc.url>);
cpds.setUser("<user>");
cpds.setPassword("<pw>"));

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

<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>
        cpds = new DriverManagerDataSource();
cpds.setDriverClass(<jdbc.driver>);
cpds.setJdbcUrl(<jdbc.url>);
cpds.setUser("<user>");
cpds.setPassword("<pw>"));
cpds=newdriverManager数据源();
setDriverClass();
setJdbcUrl();
cpds.setUser(“”);
cpds.setPassword(“”);

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

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

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

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


如何为SQLite创建数据源?是否有任何给定的东西,或者我需要对所有东西进行编码?我看到DriverManager数据源仅在Spring中出现。我可以在JavaSE中以某种方式完成吗?应该有Java.sql.DataSource可用。这也是DriverManager数据源的核心。当您创建新的租户时,您将在其中创建新的数据库(和所有表)?由于目前缺乏更好的解决方案,我正在使用本机SQL和JDBCTemplate创建新的架构/DB。这些表格通常是按照您的另一个问题所述创建的: