Java MySQL在Tomcat中的最佳使用?

Java MySQL在Tomcat中的最佳使用?,java,mysql,database,tomcat,connection-pooling,Java,Mysql,Database,Tomcat,Connection Pooling,在Tomcat中使用MySQL哪种方法更好: A)只要会话有效,就为用户分配DB连接。[或] B)打开与数据库的连接,在每个请求到达服务器时关闭该连接。 C)连接池。[最佳答案]B),或 C) 使用动力 在任何类型的请求-应答系统中,无论是http、ftp还是数据库调用,保持连接池开放以供客户端使用都是有意义的。在每个请求期间建立和断开连接的成本很高(对于客户端和服务器而言),因此拥有一个池,多个线程可以从中“签出”一个连接供其使用,这是一个很好的模式 实施 提供了一个围绕任意数量的数据库实现的

Tomcat
中使用
MySQL
哪种方法更好:
A)只要会话有效,就为用户分配DB连接。[或]
B)打开与数据库的连接,在每个请求到达服务器时关闭该连接。
C)连接池。[最佳答案]

B),或 C) 使用

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

实施 提供了一个围绕任意数量的数据库实现的包装器,这意味着调用者可以(大部分)不知道他们调用的是哪种类型的数据库。这种抽象允许程序员创建通用库,为任何类型的JDBC连接提供连接池

下面是关于连接池和MySQL的讨论

由于调用方可能只使用JDBC方法,
签出
看起来像是创建连接的请求,
签入
只是调用方关闭连接,也就是说,调用方不知道他们正在使用连接池,因为语义与使用单一连接创建/拆除解决方案没有区别。这是一件好事;这是真的

图书馆 那么,有哪些库可以让这变得容易呢

  • -以每个人最喜欢的协议droid命名,该库提供连接池和准备语句池(我相信这是一个包含
    PreparedStatement
    对象的对象池)

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

    它被广泛部署并在压力下站稳脚跟。我已经使用它在多台机器上每秒执行数十(如果不是几十万)个事务,并且每台机器连接到多个数据库上有多个线程

    他们似乎有一个专门关于配置c3p0供Tomcat使用的方法,所以您可能希望查看一下

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

    以下是有关DBCP的一些堆栈溢出问题:

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

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

缺点
您正在将
数据源
包装到某个代理中,就像其他类一样,因此可能无法访问特定于供应商的方法。这没什么大不了的:无论如何,你不应该编写特定于供应商的数据库代码。

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa