繁体   English   中英

休眠中的multiTenant数据库

[英]multiTenant database in hibernate

谁能给我展示使用Hibernate的multiTenant数据库示例,以及如何将Spring Hibernate Txmanager用于tx Mgmt。

我的要求是

这些主机数据库始终处于打开状态,并且包含有关租户Db的信息。 第一次访问master时,获取特定租户的db信息,并为租户生成会话ZFactory,其余请求应通过租户会话提供。 我已经实现了

但没有让我的交易经理为租户Dbs工作。

    <property name="packagesToScan">
        <array>
            <value>beans.table</value>
            <value>beans.views</value>
        </array>
    </property>

    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.connection.autocommit">false</prop>

            <!-- <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> -->
            <prop key="c3p0.testConnectionOnCheckout">false</prop>
            <prop key="c3p0.min_size">2</prop>
            <prop key="c3p0.max_size">10</prop>
            <prop key="c3p0.timeout">300</prop>
            <prop key="c3p0.max_statements">50</prop>
            <prop key="c3p0.idleTestPeriod">300</prop>

            <prop key="hibernate.generate_statistics">true</prop>
        </props>
    </property>
</bean>


<bean id="tenantSessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="true">

    <property name="packagesToScan">
        <array>
            <value>beans.table</value>
            <value>views</value>
        </array>
    </property>

    <!--<property name="dataSource" ref="dataSource" />-->
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.connection.autocommit">false</prop>

            <!-- <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> -->
            <prop key="c3p0.testConnectionOnCheckout">false</prop>
            <prop key="c3p0.min_size">2</prop>
            <prop key="c3p0.max_size">30</prop>
            <prop key="c3p0.timeout">300</prop>
            <prop key="c3p0.max_statements">50</prop>
            <prop key="c3p0.idleTestPeriod">300</prop>

            <prop key="hibernate.generate_statistics">true</prop>

            <prop key="hibernate.multiTenancy">DATABASE</prop>
            <prop key="hibernate.tenant_identifier_resolver">factory.MultiTenantIdentifierResolver</prop>
            <prop key="hibernate.multi_tenant_connection_provider">factory.MultiTenantConnectionProvider</prop>


        </props>
    </property>




</bean>
<!-- Declare a transaction manager -->
<!-- <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
    p:sessionFactory-ref="sessionFactory" /> spring.fix.HibernateTransactionManager 
    com.my.hibernate4.spring.fix.HibernateTransactionManager"> <property name="sessionFactory" 
    ref="sessionFactory" /> -->
<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="tenantTransactionManager"
      class="factory.MultiTenantHibernateTxManager" p:autodetectDataSource="false">
    <property name="sessionFactory" ref="tenantSessionFactory"  />

</bean>


<!-- Enable annotation style of managing transactions -->
<tx:annotation-driven transaction-manager="transactionManager"
    proxy-target-class="true"/>

<tx:annotation-driven transaction-manager="tenantTransactionManager"
                      proxy-target-class="true" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM