【问题标题】:Hibernate "connection.pool_size" property in case of using datasource在使用数据源的情况下休眠“connection.pool_size”属性
【发布时间】:2018-03-22 06:19:23
【问题描述】:

我在部署在 Websphere 应用程序服务器上的 Portlet 应用程序中使用 hibernate 4.0.1,我指的是从 hibernate 配置中配置在应用程序服务器上的数据源,我的问题是我应该使用“connection.pool_size”属性还是“ c3p0" 是否设置连接池大小? , 因为服务器上的数据源已经有 10 的连接池大小。

换句话说,Hibernate 配置或连接池的数据源配置哪个优先,哪个更好?

提前致谢。

【问题讨论】:

    标签: java hibernate websphere


    【解决方案1】:

    数据源限制传入连接。 如果您将 CP 与例如 20 个连接一起使用 - 最多将从 20 个连接获得 10 个连接。 所以你的 dsource 池大小应该是 20 或更多。

    【讨论】:

    • 感谢您的回复,所以您的意思是我只能依靠 Datasource 进行连接池,并增加其池大小。
    • 不,看,如果你想使用hibernate dbcp,它很简单,不推荐用于生产。至于c3p0,它是一个传播生产dbcp。你应该使用一个。我错误地认为你在谈论 dsource 连接大小:) 抱歉
    • 没问题,非常感谢,所以你看到我必须使用 c3p0 ,因为我看到一些应用程序既不使用 c3p0 也不使用 connection.pool_size 并且仅依赖于数据源,我需要知道什么避免生产中出现任何连接问题的最佳实践..
    • 您不仅可以使用c3p0,还有多个可以为您管理连接的dbcp(例如:apache dbcp / hikaricp等)。他们的比较你可以简单地在互联网上找到。至于早期版本的c3p0,它甚至可能陷入死锁,听说它已修复。但无论如何,任何生产 dbcp 都会比 hibernate 内置更好。
    【解决方案2】:

    当使用 WebSphere Application Server 中配置的数据源时,您可以通过 JNDI 名称直接或通过将 JNDI 名称提供给 Hibernate 配置来访问该数据源,默认情况下,您最终会得到应用程序服务器池中的连接。除了连接池,您还可以获得事务登记、连接共享、语句缓存和其他增值。应用程序服务器不会检测到备用连接池的存在并禁用它自己的。关于您关于优先级的问题,两者都不优先。如果数据源或其他实现提供了自己的连接池,您最终会在两层都进行池化,这可能是不可取的。如果您需要或愿意,可以手动禁用应用程序服务器的连接池和语句缓存,同时保留应用程序服务器提供的其他功能(事务登记等),方法是将连接池的老化超时设置为立即和数据源的 statementCacheSize 为 0。这将允许您尝试任一实现并自行判断哪个在您的特定场景中表现更好。

    【讨论】:

    • 非常感谢您的回复,所以我可以从您的回答中得知,取决于应用服务器上数据源的连接池是一种很好的做法,无需定义另一个替代连接池
    猜你喜欢
    • 2019-03-14
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多