多租户休眠不在租户之间切换

Multi-tenant hibernate doesn't switch between tenants

我正在将我的 spring + hibernate + mysql 设置更改为多租户。首先,我的 application.properties 中有以下内容:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root

我不确定在引入多租户后是否应该让它连接到此处的特定模式 (test)?这对我来说没有意义,因为如果没有提供租户,它应该使用默认模式,否则连接到与租户关联的模式。但是,如果我删除它,我会收到一条错误消息,指出没有提供数据库。

其次,多租户部分似乎不起作用。我的所有查询都是在 test 架构中进行的。我已经实施了以下 MultiTenantConnectionProvider:

@Component
public class TenantConnectionProvider implements MultiTenantConnectionProvider {
private Datasource datasource;

public TenantConnectionProvider(DataSource datasource) {
    this.datasource = datasource;
}

...

@Override
public Connection getConnection(String tenantIdentifier) throws SQLException {
    logger.info("Get connection for tenant {}", tenantIdentifier);
    final Connection connection = getAnyConnection();
    connection.setSchema(tenantIdentifier);
    return connection;
}

@Override
public void releaseConnection(String tenantIdentifier, Connection connection) throws SQLException {
    logger.info("Release connection for tenant {}", tenantIdentifier);
    connection.setSchema(DEFAULT_TENANT);
    releaseAnyConnection(connection);
}
}

我没有收到任何错误,当我进行查询时,它会正确地打印 Get connection for tenant,其中正确的 tenantIdentifier 与我的其他模式之一的名称相匹配。尽管如此,它仍会查询 test 架构。我错过了什么?谢谢!

编辑:

好像connection.setSchema(tenantIdentifier)没有效果。在该方法的描述中,它表示如下:If the driver does not support schemas, it will silently ignore this request。所以我猜我的驱动程序不支持它?遇到这种情况怎么办?

使用 connection.createStatement().execute("USE " + tenantIdentifier); 而不是 connection.setSchema(tenantIdentifier); 解决了我的问题。