用途CurrentTenantIdentifierResolver
:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionfactorybean">
<property name="hibernateProperties">
<map>
<entry key="hibernate.dialect" value="org.hibernate.dialect.sqlServer2012Dialect">
<entry key="hibernate.format_sql" value="true">
<entry key="hibernate.multi_tenant_connection_provider" value="com.company.hibernate.MultiTenantConnectionProviderImpl">
<entry key="hibernate.multiTenancy" value="DATABASE">
<!-- tenant resolver as spring bean -->
<entry key="hibernate.tenant_identifier_resolver" value-ref="currentTenantIdentifierResolver"/>
</map>
</property>
</bean>
<bean id="currentTenantIdentifierResolver"
class="com.xxx.CurrentTenantResolver">
</bean>
简单的租户标识符解析器将如下所示:
public class CurrentTenantResolver implements CurrentTenantIdentifierResolver {
public String resolveCurrentTenantIdentifier() {
// retrieve tenant from logged in user
User usr = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ;
return usr.getTenantName();
}
public boolean validateExistingCurrentSessions() {
return true;
}
}
请记住,上面的类是Spring bean,因此您可以像常规Spring bean一样自动连接任何spring bean(service / dao)。
每次Spring Need Session Hibernate都会从该bean中检索租户标识符。