我正在尝试设置一个多租户Web应用程序,同时具有(理想情况下)数据库分离和模式分离方法的可能性.虽然我将从Schema分离开始.我们目前正在使用:
大部分时间我都遵循这个主题(因为解决方案@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) 我需要在我的Web应用程序中管理与多个数据库的连接.以下是有关当前实施的事实:
1-我使用Tomcat
在运行时动态创建2-数据库(我使用的是mysql)
毫无疑问,拥有一个连接池来管理数据库连接是最佳选择.由于数据库在应用程序启动时是未知的,因此我无法设置数据源并建立连接池.(我在Tomcat中找不到创建动态连接池的方法:在运行时创建的连接池).
我的问题是:我有什么其他选择可以有效地与多个数据库连接?(我没有自己实现连接池的经验)是否有任何可以与tomcat一起使用的库,并允许我在运行时建立到不同数据库的多个连接池?如果不是,你建议我做什么而不是连接池?我对这个问题相当新,所以如果我弄乱了概念,请纠正并指导我.
先感谢您.
c3p0 ×1
hibernate ×1
java ×1
jdbc ×1
multi-tenant ×1
mysql ×1
postgresql ×1
spring ×1
tomcat ×1