Tomcat 中配置数据库连接池
在 Tomcat 服务器中配置数据库连接池是一个非常重要的步骤,它可以提高应用程序的性能和可靠性。在这篇文章中,我们将详细介绍如何在 Tomcat 目录下面的 Context.xml 配置文件中配置数据库连接池。
我们需要在 Tomcat 服务器目录下面的 conf 中找到一个叫 Context.xml 的配置文件,在其中加入以下代码:
```
<Resource name="jdbc/books" auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="120010"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=news"/>
```
这个配置文件中的各个参数含义如下:
* JNDI (Java Naming and Directory Interface): Java 命名和目录接口
* maxActive="100":表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独供一个应用使用通过设置 maxActive 参数可以避免某个应用无限制的获取连接对其他应用造成影响。
* maxIdle="30":如果在并发时达到了 maxActive=100 那么连接池就必须从数据库中获取 100 个连接来供应用程序使用,当应用程序关闭连接后,由于 maxIdle=30,因此并不是所有的连接都会归还给数据库,将会有 30 个连接保持在连接池种中,状态为空闲。
* minIdle=”2”:最小默认情况下并不生效,它的含义是当连接池中的连接少有 minIdle 时,系统监控线程将启动补充功能,一般情况下我们并不启动补充线程。
那么,如何设置 maxActive 和 maxIdle 呢?理论上讲 maxActive 应该设置成应用的最大并发数,這样一来即便是在最大并发的情况下,应用依然能够从连接池中获取连接。实际上,如果某个用户登录提示系统繁忙那么在他再次登录时,可能系统资源已经充足,对于拜特资金管理系统我们建议将 maxActive 设置为系统注册人数的十分之一到二十分之一之间。例如系统的注册人数为 1000,那么设置成 50-100 靠近 100 的数字,例如 85 或 90。
而 maxIdle 对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据库大量的资源,因此 maxIdle 也并不是越大越好,同上例我们建议将 maxIdle 设置成 50-100 中靠近 50 的数字,例如 55。
此外,我们还可以设置 removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" 以避免连接池中的连接被长时间占用。有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连接池的连接就会逐渐达到 maxActive 直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了 removeAbandoned="true" 时,当连接池连接数到达 (getNumIdle() <2) and (getNumActive() > getMaxActive() - 3) 时便会启动连接回收,那些活动时间超过 removeAbandonedTimeout="60" 的连接将会被回收,同时如果 logAbandoned="true" 设置为 true,程序在回收连接的同时会打印日志。
需要注意的是,removeAbandoned 是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。
在配置完 Context.xml 文件后,我们还需要将数据驱动.jar 放入 tomcat 目录下的 lib 或 common\lib 下面,以便 Tomcat 服务器可以正确地加载数据库驱动程序。
配置数据库连接池是 Tomcat 服务器中非常重要的一步,它可以提高应用程序的性能和可靠性。通过正确地配置 Context.xml 文件和设置合适的参数,我们可以获得一个高效的连接池,提高应用程序的整体性能。