建立基于 JDBC 的 Tomcat 连接池
2006-08-03 17:20
531 查看
使用传统的方式开发 JDBC 应用时,要为每一次请求建立一次数据库连接,因此在一个这样 Web 应用中,建立数据库连接的操作是系统中代价最大的操作之一。而且,你必须去管理每一个连接,确保他们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄露,最终将不得不重启数据库。针对以上问题,首先想到可以采用一个全局的 Connection 对象,创建后就不关闭,以后程序一直使用它,这样就不存在每次创建、关闭的问题了。但是,同一个连接使用次数过多,将会导致连接的不稳定,进而会导致 Web 服务器的频频重启。故而,这种方法也不可取。而连接池技术可以解决上述问题。连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用,当程序需要建立数据库连接时,只须从内存中取出一个来使用,使用完毕后,只需放回内存即可。而连接的创建和关闭都由连接池来管理。同时,还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等。通过使用连接池,将大大提高程序效率。
做为 Sun 公司推荐的 JSP、Servlet 容器,Tomcat 在 4.0 以上版本支持连接池机制,本文的讨论基于 Tomcat 4.1.24 以及 Oracle 8i 数据库环境。
其中 jar 随 JDK 提供。
在应用的 web.xml 文件中添加如下 DataSource 声名:
重新启动 Tomcat:
做为 Sun 公司推荐的 JSP、Servlet 容器,Tomcat 在 4.0 以上版本支持连接池机制,本文的讨论基于 Tomcat 4.1.24 以及 Oracle 8i 数据库环境。
准备
假设你的 Tomcat 和 Oracle 已经分别跑起来,下面首先为 Tomcat 增加 Oracle 的 JDBC 驱动,Oracle 8.1.7 自带的 JDBC 驱动是 classes12.zip 和 nls_charset12.zip,为了使它们能够被 Tomcat 自动加载,要把他们变为 JAR 格式。实际上 JAR 文件就是包含了 META-INF/MANIFEST.MF 的 zip 文件。unzip classes12.zip jar cf classes12.jar javax oracle rm -rf javax oracle unzip nls_charset12.zip jar cf nls_charset12.jar oracle rm -rf oracle cp classes12.jar nls_charset12.jar $CATALINA_HOME/common/lib
其中 jar 随 JDK 提供。
配置
假设应用所在的目录别名为 test,Oracle 运行在本地,SID 为 orcl,一个可用的用户名为 dev,口令为 dev123,那么把 Tomcat 的配置文件 server.xml 中的相应上下文修改为:<Context path="/test" docBase="/var/www/test" debug="0" reloadable="true"> <Resource name="jdbc/testpool" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/testpool"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:orcl</value> </parameter> <parameter> <name>username</name> <value>dev</value> </parameter> <parameter> <name>password</name> <value>dev123</value> </parameter> <parameter> <name>maxActive</name> <value>10</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> </Context>
在应用的 web.xml 文件中添加如下 DataSource 声名:
<resource-ref> <res-ref-name>jdbc/testpool</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
重新启动 Tomcat:
/etc/init.d/catalina stop /etc/init.d/catalina start
执行一个 SQL 语句的演示
以下是这个测试 JSP 文件的核心内容:<%@ page contentType="text/html; charset=GBK"%> <%@ page import="java.sql.*, javax.naming.*"%> <% try { Context initCtx = new InitialContext(); Context ctx = (Context) initCtx.lookup("java:comp/env"); Object obj = (Object) ctx.lookup("jdbc/testpool"); javax.sql.DataSource ds = (javax.sql.DataSource)obj; Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.CONCUR_READ_ONLY); String strSQL = "SELECT * FROM emp"; ResultSet rs = stmt.executeQuery(strSQL); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> ... </html> <% rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); throw e; } %>
相关文章推荐
- 建立基于 JDBC 的 Tomcat 连接池
- 建立基于JDBC的resin3.0.8的连接池
- 建立基于JDBC的resin3.0.8的连接池
- 建立基于JDBC的resin3.0.8的连接池
- 建立基于JDBC的resin3.0.8的连接池
- 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null' 及can not load org.gjt.mm.mysql.Driver)
- 使用tomcat连接池的时候的Cannot create JDBC driver of class '' for connect URL 'null'异常
- DBCP,C3P0,Tomcat_JDBC 等连接池的性能及稳定性测试 druid待补充
- spring boot(10)-tomcat jdbc连接池
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介
- 基于JDBC的数据库连接池高效管理策略
- c3p0、dbcp、tomcat jdbc pool 连接池区别
- Connection-采用tomcat连接池建立Connecton连接
- 基于JDBC的数据库连接池技术研究与应用
- Tomcat 7 新的连接池 —— Tomcat jdbc pool + JNDI
- 基于JDBC的数据库连接池高效管理策略
- 基于JDBC的数据库连接池技术研究与应用
- 【JDBC连接池】Tomcat连接池v8.5.9官方文档翻译
- Oracle JDBC驱动, Tomcat连接池的坑