我们的应用程序有多个模块,每个模块在同一个mysql数据库中使用自己的模式。现在我需要为每个模块制作不同的连接池配置,因为它们具有不同的数据库资源消耗性质,即某些模块在某个时间点可能有20个活动连接,但其他模块可能只有1个最大值。我在这里和其他论坛上搜索过,找不到解决方案,只是这个主题不是关于多租户或多数据库,所有模式都在同一个数据库中。
这是我们的配置:
<bean id="dataSource" class="our.own.package.RoutingDataSource"> <!-- RoutingDataSource extends spring AbstractDataSource -->
<property name="master" ref="masterDS"/>
</bean>
<bean id="abstractDataSource" abstract="true">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="initialPoolSize" value="@initial.pool.size@" />
<property name="minPoolSize" value="@min.pool.size@" />
<property name="maxPoolSize" value="@max.pool.size@" /> <!-- I want to have different configs for each module in our application -->
</bean>
<bean id="masterDS" class="com.mchange.v2.c3p0.ComboPooledDataSource" parent="abstractDataSource">
<property name="jdbcUrl" value="jdbc:mysql://@host@/" />
<property name="user" value="@user@" />
<property name="password" value="@pwd@" />
<property name="dataSourceName" value="@dbName@" />
</bean>
所以现在我有两个问题:
1)Spring中的一个数据源是否可以有不同的连接池配置?
2)如果我必须采用多种数据源方式(一个模块的一个数据源),那么实现Spring的AbstractRoutingDataSource
是否正确?
谢谢!
答案 0 :(得分:0)
Ad.1您的数据源位于事实连接池中,因此您希望在另一个池的顶部有多个池。你可以做到,但你将面临许多其他问题。
Ad.2。当然是。您已经拥有RoutingDataSource
,因此这个应该是AbstractRoutingDataSource
的实施。可能你已经有逻辑确定当前应该用于查找的数据源routing key
。