没有默认租户的Spring Boot多租户

没有默认租户的Spring Boot多租户,spring,hibernate,spring-boot,multi-tenant,Spring,Hibernate,Spring Boot,Multi Tenant,我们面临着解决这个问题的艰难时刻! 我们正在尝试将MTA用于spring引导服务,而不使用默认租户。 这意味着当当前上下文中不存在租户时,我们希望从CurrentTenantIdentifierResolver实现返回null。 这在我们用JavaEE+Hibernate+Deltaspike数据构建的其他服务中运行良好,但在启动过程中我们的Spring服务失败 异常消息如下:“原因:org.hibernate.HibernateException:SessionFactory配置为多租户,但未

我们面临着解决这个问题的艰难时刻! 我们正在尝试将MTA用于spring引导服务,而不使用默认租户。 这意味着当当前上下文中不存在租户时,我们希望从CurrentTenantIdentifierResolver实现返回null。 这在我们用JavaEE+Hibernate+Deltaspike数据构建的其他服务中运行良好,但在启动过程中我们的Spring服务失败

异常消息如下:“原因:org.hibernate.HibernateException:SessionFactory配置为多租户,但未指定租户标识符”

问题似乎是存储库工厂试图在启动期间为我们的crud存储库创建实例/bean,但没有(也不会)租户: 在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.(JpaRepositoryFactory.java:59)~[spring-data-jpa-1.11.3.RELEASE.jar:na]

因此,我们的问题是,是否有任何人对此有解决方案,因为我们希望避免使用默认租户。对于我们来说,使用默认值似乎容易出错,并且会隐藏非法的应用程序状态

我们使用的是SpringBoot父版本1.5.3.0

如果重要:我们的服务是简单的JSON RPC服务,租户将出现在传入的http请求中,并由mvc拦截器在本地线程上设置。在JavaEE世界中,我们使用webfilters来实现这一点


非常感谢你的帮助

实际上我还没有尝试过这种方法

最初会抛出异常


建议替换hibernate会话工厂(请参阅)以返回
MultitenacyStrategy。如果当前上下文中没有租户,则无

Hm,这感觉不正确。我们正在使用mta,但如果没有租户,请告诉hibernate我们没有。这将再次引入隐藏非法状态的可能性…到目前为止,最好的解决方案是重新调整空字符串,这将在使用连接时导致异常。
protected AbstractSessionImpl(SessionFactoryImpl factory, String tenantIdentifier) {
    this.factory = factory;
    this.tenantIdentifier = tenantIdentifier;
    if ( MultiTenancyStrategy.NONE == factory.getSettings().getMultiTenancyStrategy() ) {
        if ( tenantIdentifier != null ) {
            throw new HibernateException( "SessionFactory was not configured for multi-tenancy" );
        }
    }
    else {
        if ( tenantIdentifier == null ) {
            throw new HibernateException( "SessionFactory configured for multi-tenancy, but no tenant identifier specified" );
        }
    }
}