Я нахожусь в процессе смены настройки весны + гибернации + mysql на мультитенанта. Прежде всего, в моем application.properties
есть следующее:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
Я не уверен, должен ли я подключить его к указанной c схеме здесь (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
. Значит, мой драйвер не поддерживает его? Что делать в этом случае?