通过实现 MultiTenantConnectionProvider 接口,我已经基于架构实现了Hibernate多租户。无需赘述,我的“ getConnection”实现选择架构,例如:
USE tanant_name
到目前为止,一切正常。下一步,我要对这些东西进行单元测试。我使用SpringBoot和内存H2数据库进行测试。
H2的语法不同于MySQL。在H2中,使用通过以下方式完成的方案:
SET SCHEMA tanant_name
我试图设置MYSQL兼容模式,如下所示:
SET MODE MySQL
这似乎没有任何效果,可能是由于MYSQL兼容性限制(不确定)。
还有其他选项可以对Hibernate多租户配置进行单元测试吗?
BTW:多租户配置是Java配置,它由Spring在应用程序引导期间自动注入。它看起来如下:
@Configuration
public class HibernateMultitenancyConfig {
@Autowired
private JpaProperties jpaProperties;
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
return new HibernateJpaVendorAdapter();
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
Map<String, Object> properties = new HashMap<>();
properties.putAll(jpaProperties.getProperties());
properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("com.my.package");
em.setJpaVendorAdapter(jpaVendorAdapter());
em.setJpaPropertyMap(properties);
return em;
}
}