基于DBCP的JNDI数据源配置

测试环境: MySql5.5 , Tomcat7.0

第1步:因为Tomcat已经将DBCP整合到项目中,所以只需将MySql的驱动jar拷贝到Tomcat安装目录下的lib  

目录中:

    

 

第2步:在web项目的META-INF下创建context.xml文件,在其中添加JNDI数据源的配置:



 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource 
		auth="Container" 
		driverClassName="com.mysql.jdbc.Driver"
		maxActive="100" 
		maxIdle="40" 
		maxWait="4000" 
		name="jdbc/test" 
		username="root" 
		password="avisionav"
		type="javax.sql.DataSource"
		url="jdbc:mysql://localhost:3306/mercury?useUnicode=true&amp;characterEncoding=UTF-8" />
</Context>

配置参数说明:

maxActive      连接池支持的最大连接数 
maxIdle          连接池中最多可空闲maxIdle个连接 
minIdle           连接池中最少空闲maxIdle个连接 
initialSize       初始化连接数目 
maxWait         连接池中连接用完时,新的请求等待时间,毫秒 
timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每 timeBetweenEvictionRunsMillis 毫秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis   毫秒的连接断开,直到连接池中的连接数到minIdle为止 

minEvictableIdleTimeMillis   连接池中连接可空闲的时间,毫秒 removeAbandoned true,false,是否清理removeAbandonedTimeout  秒没有使用的活动连接,清理后并没有放回连接池 
removeAbandonedTimeout  活动连接的最大空闲时间 
logAbandoned true,false,     连接池收回空闲的活动连接时是否打印消息 

minEvictableIdleTimeMillis,removeAbandonedTimeout这两个参数针对的连接对象不一样,

minEvictableIdleTimeMillis    针对连接池中的连接对象,

removeAbandonedTimeout   针对未被close的活动连接. 

第3步:在index.jsp中添加如下代码:

    

<%@ page language="java" import="java.util.*,javax.naming.*,java.sql.*,javax.sql.*" pageEncoding="UTF-8"%>

<%      
		    Context ctx = new InitialContext();        
		    String strLookup = "java:comp/env/jdbc/test";   
		    DataSource ds =(DataSource) ctx.lookup(strLookup);  
		    Connection con = ds.getConnection();  
		    if (con != null){  
		        out.print("success");  
		   	}else{  
		        out.print("failure");  
		    }         
%>

第4步:发布测试成功:



 

其它:基于JNDI数据源的数据库工具类:

public class DBUtil {
	private static DataSource ds = null;
	static {
		try {
			Context ctx = new InitialContext();
			String rsName = "java:comp/env/jdbc/test";
			ds = (DataSource) ctx.lookup(rsName);
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	public static Connection getConn() {
		Connection conn = null;
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			System.out.println("无法获得数据库链接");
		}
		return conn;
	}
}

另外要注意,此工具一定要运行在web容器中,应为此JDNI是由TOMCAT提供的,假如单独写一个main方法调用工具类的getConn()方法,会报如下错误:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at com.study.DBUtil.<clinit>(DBUtil.java:19)

猜你喜欢

转载自avisionav.iteye.com/blog/2281797