相关疑难解决方法(0)

使用Spring,Hibernate和C3P0管理多租户Web应用程序中的连接池

我正在尝试设置一个多租户Web应用程序,同时具有(理想情况下)数据库分离和模式分离方法的可能性.虽然我将从Schema分离开始.我们目前正在使用:

  • Spring 4.0.0
  • Hibernate 4.2.8
  • Hibernate-c3p0 4.2.8(使用c3p0-0.9.2.1)
  • 和PostgreSQL 9.3(我怀疑它对整体架构真的很重要)

大部分时间我都遵循这个主题(因为解决方案@Transactional).但我在执行方面有点迷失MultiTenantContextConnectionProvider.在这里也提到了类似的问题,但有些方面我无法弄清楚:

1)连接池会发生什么?我的意思是,它是由Spring还是Hibernate管理的?我猜ConnectionProviderBuilder- 或者按照建议 - 任何实现,Hibernate都是管理它的人.
2)Spring不管理连接池是一种好方法吗?或者Spring是否可以管理它?
3)这是未来实现数据库和模式分离的正确途径吗?

任何评论或描述都完全赞赏.

应用程序的context.xml

<beans>
    ...
    <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource" ref="c3p0DataSource" />
    </bean>

    <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="org.postgresql.Driver" />
        ... other C3P0 related config
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="packagesToScan" value="com.webapp.domain.model" />

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.default_schema">public</prop>

                <prop key="hibernate.multiTenancy">SCHEMA</prop>
                <prop key="hibernate.tenant_identifier_resolver">com.webapp.persistence.utility.CurrentTenantContextIdentifierResolver</prop>
                <prop key="hibernate.multi_tenant_connection_provider">com.webapp.persistence.utility.MultiTenantContextConnectionProvider</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="autodetectDataSource" …
Run Code Online (Sandbox Code Playgroud)

postgresql spring hibernate c3p0 multi-tenant

27
推荐指数
1
解决办法
2万
查看次数

如何管理与动态创建的数据库的连接

我需要在我的Web应用程序中管理与多个数据库的连接.以下是有关当前实施的事实:

1-我使用Tomcat

在运行时动态创建2-数据库(我使用的是mysql)

毫无疑问,拥有一个连接池来管理数据库连接是最佳选择.由于数据库在应用程序启动时是未知的,因此我无法设置数据源并建立连接池.(我在Tomcat中找不到创建动态连接池的方法:在运行时创建的连接池).

我的问题是:我有什么其他选择可以有效地与多个数据库连接?(我没有自己实现连接池的经验)是否有任何可以与tomcat一起使用的库,并允许我在运行时建立到不同数据库的多个连接池?如果不是,你建议我做什么而不是连接池?我对这个问题相当新,所以如果我弄乱了概念,请纠正并指导我.

先感谢您.

java mysql tomcat jdbc

13
推荐指数
1
解决办法
4778
查看次数

标签 统计

c3p0 ×1

hibernate ×1

java ×1

jdbc ×1

multi-tenant ×1

mysql ×1

postgresql ×1

spring ×1

tomcat ×1