使用 MyBatis 时如何在 PooledDataSource 和 dbcp 之间做出选择?

How to make a choice between PooledDataSource and dbcp when I work with the MyBatis?

我现在正在配置一个使用 spring 和 mybatis 的项目。

网上有很多例子告诉我应该使用org.springframework.jdbc.datasource.DriverManagerDataSource作为数据源,但是mybatis使用PooledDataSource作为数据源,这让我很困惑。所以,我阅读了 DirverManagerDataSource 的源代码,它只是一个模拟池连接。所以,我知道如何做出选择了。

但是,我很快就有了新问题。如何在PooledDataSourceDBCP之间做出选择?我看了PooledDataSource的源码,也是一个简单的实现,但是这两个lib的代码太复杂了,我没有足够的时间看这些代码。

你能告诉我哪个更厉害吗?为什么?谢谢!

对于Spring和MyBatis,你用什么在功能上并不重要。只要有一个 DataSource 可用于配置,那么一切都会起作用。使用 Spring,通常最容易在 Spring 配置中创建 DataSource 并将其传递给 MyBatis SqlSessionFactoryBean.

MyBatis 的 PooledDataSource 从性能的角度来看应该没问题,但它 synchronize 所以它 可能 有争用问题,因为并发性非常高。它可以在 Spring 中配置为普通 bean。

DPCP 具有更多功能(尤其是 JMX 监控),版本 2 应该比 DPCP v1 具有更好的性能。

如果您 运行 在容器中,您可能希望通过 JNDI 使用容器的池(参见 JndiObjectFactoryBean)。如果您使用 Tomcat,它将拥有自己的 pool implementation