在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(); } } }
|