Я хочу знать, как мультитенантный поставщик соединений hibernate обрабатывает соединения с базой данных для нескольких арендаторов в рамках подхода с несколькими арендаторами для отдельной базы данных.Если я использую API с тем же арендатором, скажем, 1234, то при первом обращении к нему следует подключиться к конкретной базе данных этого арендатора, а после нескольких обращений к одному и тому же арендатору, будет ли оно использовать то же соединение с базой данных, либо снова откроет новое соединение длятот же арендатор?
Я использовал AbstractDataSourceBasedMultiTenantConnectionProviderImpl
и CurrentTenantIdentifierResolver
реализации в базе данных для каждого подхода арендатора
class CurrentTenantIdentifierResolver {
// Other methods + fields
public String resolveCurrentTenantIdentifier() {
String tenantId = TenantContext.getCurrentTenant();
return tenantId;
}
}
class AbstractDataSourceBasedMultiTenantConnectionProviderImpl {
// Other methods + fields
@Override protected DataSource selectDataSource(String tenantIdentifier) {
return MultiTenantInitService.getDataSourceMap().get(tenantIdentifier);
}
}
class MultiTenantInitService {
// Other methods + fields
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(prop.getProperty("spring.jpa.properties.hibernate.driver-class-name"));
dataSource.setUrl(prop.getProperty("spring.datasource.url"));
dataSource.setUsername(prop.getProperty("spring.datasource.username"));
dataSource.setPassword(prop.getProperty("spring.datasource.password"));
dataSourceMap.put(ApplicationConstants.DEFAULT_TENANT_ID, dataSource);
}
Я ожидал, что мультитенантный провайдер подключится к базе данных при первом попадании APIдля одного арендатора только один раз.Не следует снова и снова открывать соединения для одного и того же арендатора.Новое соединение с базой данных должно быть сформировано только для нового арендатора.Но если он действительно открывает соединения, он также должен самостоятельно управлять закрытием соединения.