基于Hibernate模式的多租户单元测试

时间:2019-01-14 13:41:13

标签: java mysql hibernate spring-boot h2

通过实现 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;
    }
}

0 个答案:

没有答案