应用程序

时间:2017-04-04 17:55:27

标签: java mysql spring datasource connection-pooling

我们的应用程序有多个模块,每个模块在同一个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是否正确?

谢谢!

1 个答案:

答案 0 :(得分:0)

Ad.1您的数据源位于事实连接池中,因此您希望在另一个池的顶部有多个池。你可以做到,但你将面临许多其他问题。

Ad.2。当然是。您已经拥有RoutingDataSource,因此这个应该是AbstractRoutingDataSource的实施。可能你已经有逻辑确定当前应该用于查找的数据源routing key