【问题标题】:How to make a choice between PooledDataSource and dbcp when I work with the MyBatis?使用 MyBatis 时如何在 PooledDataSource 和 dbcp 之间做出选择?
【发布时间】:2016-12-04 08:09:05
【问题描述】:

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

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

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

你能告诉我哪个更强大吗?为什么?谢谢!

【问题讨论】:

    标签: java datasource mybatis apache-commons-dbcp


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 如果在容器中运行,一般是通过JNDI使用容器的池吗?
    • 在容器中运行时,容器的池和第三方池有什么区别吗?
    • 例子,我在Tomcat中运行时Tomcat的pool和DPCP V2的区别?
    • 在容器中,您将使用 JNDI。使用Tomcat的池会更容易。要使用 DPCP,您需要创建一个自定义 <Resource>,并将工厂属性设置为 org.apache.commons.dbcp2.BasicDataSourceFactory
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2022-08-20
    • 2023-03-05
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多