我们正面临解决这个问题的困难时期! 我们正在尝试使用MTA进行Spring引导服务,而不使用默认租户。 这意味着当当前上下文中没有租户时,我们希望从CurrentTenantIdentifierResolver实现返回null。 这在我们使用JavaEE + Hibernate + Deltaspike Data构建的其他服务中运行良好,但在启动时使用我们的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]
所以我们的问题是,如果有人有解决方案,我们希望避免使用默认租户。对于我们来说,使用默认值似乎容易出错,并且会隐藏非法的应用程序状态。
我们使用的是spring boot parent 1.5.3.RELEASE。
如果重要:我们的服务是简单的JSON RPC服务,租户将出现在传入的http请求中,并由mvc拦截器设置在本地线程上。在JavaEE世界中,我们正在使用webfilters。
非常感谢你的帮助!
答案 0 :(得分:0)
其实我没有尝试过这种方法。
最初在the code
中引发了异常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" );
}
}
}
建议如果当前上下文中没有租户,则替换hibernate会话工厂(请参阅the example)以返回MultiTenancyStrategy.NONE