代码之家  ›  专栏  ›  技术社区  ›  mabuzer

MySQL在Tomcat中的最佳使用?

  •  5
  • mabuzer  · 技术社区  · 14 年前

    MySQL 在里面 Tomcat :
    A) 只要用户的会话有效,就为其分配DB连接[或]

    C) 连接池[最佳答案]

    2 回复  |  直到 14 年前
        1
  •  8
  •   Community arnoo    7 年前

    动力

    在任何类型的请求-应答系统中,无论是http、ftp还是数据库调用,保持连接池处于打开状态以供客户端使用都是有意义的。在每个请求期间建立和断开连接的成本都很高(对于客户端和服务器都是如此),因此拥有一个池,多个线程可以从中“签出”一个连接以供其使用是一个很好的模式。

    实施

    这个 JDBC API

    这是你的答案 Sun page 在连接池上,以及 here's one 来自MySQL。

    由于调用者可能只使用JDBC方法 checkout 看起来像是创建连接的请求 checkin

    图书馆

    • c3p0 这个库以每个人最喜欢的协议droid命名,提供连接池 PreparedStatement 对象)。

      他们网站上的文档非常详尽。实际上,我的办公桌上打印了一份物理拷贝,因为我在进行调优时需要查阅它。所有配置都是以JavaBeans风格完成的,这使得使用它变得轻而易举。

      它被广泛部署,在压力下挺身而出。我曾经用它在多台机器上每秒处理几十甚至几十万个事务,每台机器连接到多个数据库时有多个线程。

      appendix 特别是关于配置c3p0供Tomcat使用,所以您可能希望检查一下。

    • DBCP 不太具创造性的apachedbcp(用于“数据库连接池”)与c3p0做了几乎相同的事情。这个 discussion 似乎不鼓励使用它,认为c3p0是更积极地维护。我真的不记得为什么我在上一个项目中选择了c3p0而不是DBCP(可能是熟悉的),但是如果您想让DBCP看一看,请继续。

      我不想成为一个消极的南希,但我不认为DBCP是你想要的。

    • BoneCP 也许是有创意的名字,但听起来有点奇怪。我从没用过。作者说这是 really fast ,他可能是对的。它似乎是你所有选择中最不成熟的,至少是暂时的,但你应该试一试,看看它是否满足你的需要。

    缺点

    你在包装你的衣服 DataSource 在某些代理类中,与其他类类似,因此特定于供应商的方法可能无法访问。这没什么大不了的:无论如何,您不应该编写特定于供应商的DB代码。

        2
  •  2
  •   Bozho    14 年前

    B) ,或 C) 使用 connection pool