在TOMCAT上配置连接池
一.配置数据源:
使用TOMCAT提供的JNDI将数据源对象注册为一个命名服务,然后在系统中使用JNDI提供的接口按照名称查询得到对应的数据源。
1. 安装DBCP(Database Connection Pool)数据源
TOMCAT默认自带的三个JAR文件:(TOMCAT_HOME/common/lib目录下)
Commons-dbcp-1.1.jar
Commons-collections. jar
Commons-pool-1.1.jar
复制JDBC驱动器的JAR文件至common/lib目录下。
2. 配置server.xml
<Context path="" docBase="E:/MyProject/sample" debug="0" reloadable="true" >
<Resource name="jdbc/sample" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/sample">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!--回收被遗弃的数据库连接至连接池-->
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<!--数据库连接过60秒不用将被遗弃而收回连接池-->
<parameter>
<name>removeAbandonedTimeout</name>
<value>60</value>
</parameter>
<!--将被遗弃的连接回收记入日志-->
<parameter> <name>logAbandoned</name>
<value>true</value>
</parameter>
<!--连接池中可容纳的最大连接数-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!--池中可容纳的最大闲置数据连接数-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<!--等待数据库连接的最长时间(超时则抛出异常)-->
<parameter> <name>maxWait</name>
<value>10000</value>
</parameter>
<!--数据库访问的用户名与密码-->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>sa</value>
</parameter>
<!--Class name for Microsoft SQLServer-->
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter> <parameter>
<!--JDBC connection url for connecting to MSSQL dB-->
<name>url</name>
<value>jdbc:microsoft:sqlserver://10.28.78.150:1433;databaseName=Northwind</value>
</parameter>
</ResourceParams>
</Context>
<resource-ref> <description>DataSource</description> <res-ref-name>jdbc/sample</res-ref-name> <res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth> </resource-ref> |
二.使用配置的数据池:
定义一个DBSource类作为数据库的全局唯一访问点,封装了查询JNDI数据源并获得连接的操作,提供了一个静态方法getConnection()用于获得连接。
import javax.sql.DataSource; import javax.naming.*; import java.sql.*; public class DBSource { private static DataSource ds; static{ init(); } private static void init(){ try { //创建命名服务环境
Context ctx = new InitialContext(); if(ctx == null) throw new Exception("No Context"); //从JNDI中查询数据源对象
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ykz"); }catch(Exception e) { e.printStackTrace(); } } //将构造函数定义为private是为了保证全局只有一个DataSource实例
private DBSource(){ ds = null; } public static Connection getConnection() throws SQLException{ if(ds == null) throw new SQLException("数据源对象为空"); else { //从数据源获得数据库连接
return ds.getConnection(); } } }