日期:2014-05-16  浏览次数:20497 次

Tomcat6 中使用Jndi获取数据库连接

很久没有使用jndi进行开发了,近期有个老的项目维护发现自己对数据源的配置都陌生了,这里总结下相关的资料,共有需要的朋友参考。

?

首先在web应用程序下的META-INF目录里建立并配置context.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
?<Resource
??name="jdbc/mysql"
??auth="Container"
??type="javax.sql.DataSource"
??maxActive="20"
??maxIdle="30"
??maxWait="10000"
??username="root"
??password="zhangji"
??driverClassName="com.mysql.jdbc.Driver"
??url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8"
??removeAbandoned="true"
??removeAbandonedTimeout="120"
?/>
</Context>

?

?name="jdbc/mysql" 表示通过Web应用程序从上下文:java:comp/env/jdbc/mysql(逻辑名称)中创建易访问的JNDI资源。上下文java:comp/env/的一部分被添加到所有的Tomcat管理器文本中。Web应用程序代码可以使用上下文来查找数据源

auth 指定如果Tomcat容器认证代表应用程序则(auth="Container"),如果应用程序以程序的方式工作则(auth="Application")

type="javax.sql.DataSource" 在查找中返回的资源类型时Javax.sql.DataSource。它也指定容器认证不支持代表Web应用程序的RDBMS

maxActive 在连接池中活动链接的最大数量。0值代表无限制

maxIdle 在连接池中未被收回的空闲连接数量。1值代表无限制

maxWait 以毫秒为单位,在抛出一个异常之前,管理器等待数据库连接回应的最长时间。1值代表一直等待

removeAbandoned="true" 和 removeAbandonedTimeout="120" 的意思表示DBCP池管理器代码回收所有的空闲超过2分钟的JDBC链接。(120秒)注意这里的配置对于那些由于不完善的开发代码而没有完全释放的连接也是如此。

?

第二部 在web.xml中进行相应配置

??<resource-ref>
???<res-ref-name>jdbc/mysql</res-ref-name>
???<res-type>javax.sql.DataSource</res-type>
???<res-auth>Container</res-auth>
??</resource-ref>

?

最后编写如下代码,实现获得数据源连接:

try {
???Context ctx = new InitialContext();
???DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
???Connection con = ds.getConnection();
???Statement stat = con.createStatement();
???ResultSet rs = stat.executeQuery("select * from members");
???while(rs.next()){
????System.out.println(rs.getString(1));
????System.out.println(rs.getString(2));
????System.out.println("====================");
???}
??} catch (NamingException e) {
???e.printStackTrace();
??} catch (SQLException e) {
???e.printStackTrace();
??}

注意:用tomcat的jndi连接池必须把mysql数据库的链接jar文件放在tomcat的lib目录下 !!!

?