Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多租户Hibernate模式方法,使用mysql切换模式,但有问题_Java_Mysql_Hibernate_Multi Tenant - Fatal编程技术网

Java 多租户Hibernate模式方法,使用mysql切换模式,但有问题

Java 多租户Hibernate模式方法,使用mysql切换模式,但有问题,java,mysql,hibernate,multi-tenant,Java,Mysql,Hibernate,Multi Tenant,我已经用mysql和hibernate实现了多租户,但我怀疑它是否能在现实世界中工作 根据hibernate文档中的以下引用,应该可以: 连接可以指向数据库本身(使用某些默认模式),但可以使用SQL SET schema(或类似)命令更改连接。使用这种方法,我们将有一个JDBC连接池用于服务所有租户,但在使用连接之前,它将被更改为引用由与当前登录用户关联的“租户标识符”命名的模式。 这是我在上面一段中得到的链接 因此,我覆盖了MultiTenantConnectionProvider,如下所示

我已经用
mysql
hibernate
实现了多租户,但我怀疑它是否能在现实世界中工作

根据hibernate文档中的以下引用,应该可以:

连接可以指向数据库本身(使用某些默认模式),但可以使用SQL SET schema(或类似)命令更改连接。使用这种方法,我们将有一个JDBC连接池用于服务所有租户,但在使用连接之前,它将被更改为引用由与当前登录用户关联的“租户标识符”命名的模式。

这是我在上面一段中得到的链接

因此,我覆盖了
MultiTenantConnectionProvider
,如下所示

@Override
public Connection getConnection(String tenantIdentifier) throws SQLException {
    Connection tenantSpecificConnection = dataSource.getConnection();
    if (!StringUtils.isEmpty(tenantIdentifier)) {
        Statement statement = tenantSpecificConnection.createStatement();
        statement.executeQuery("use " + tenantIdentifier);
        statement.close();
        tenantSpecificConnection.setSchema(tenantIdentifier);
    } else {
        tenantSpecificConnection.setSchema(Constants.DEFAULT);
    }
    return tenantSpecificConnection;
}

这是一个非常基本的迭代,第一次,我只是能够切换数据库。但我也有一些问题。这在现实世界中有效吗?我认为多个用户在使用时会造成麻烦?根据hibernate文档,它不应该这样做,但看起来可能会导致问题。是否有人尝试过此方法,请在此方面寻求帮助。

“我认为多个用户在使用此方法时会造成问题?”您为什么这样认为?因为多个用户将同时访问相同的代码库,所有这些用户可能属于不同的租户。对于每个租户,我将使用不同的数据库模式。是的,哪里有问题?你不认为一个db连接被多个用户同时使用,是吗?如果您这样做了,在您试图理解多租户之前,您可能应该阅读更多关于JDBC、数据库、连接池等的内容。你似乎更相信你自己错误的预感而不是官方文件。哦,是的,我现在知道了,它正在更改每个连接的数据库@Kayaman我有点生疏了,因为我很久没有研究JDBC/Hibernate的东西了,但是谢谢:):)我会再次阅读所有这些主题:):)