tomcat配置dbcp数据库连接池

时间:2020-12-01 04:35:27

主要步骤:

1.要在tomcat下的conf包中的server.xml中加入数据库连接池配置信息:

在<Host>标签下加入

 

  <Context path="/myweb" docBase="D:/apache-tomcat-6.0.18/webapps/myweb" > 
  <Resource auth="Container" name="jdbc/jlndb" type="javax.sql.DataSource"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
    driverClassName="oracle.jdbc.OracleDriver"     
    url="jdbc:oracle:thin:@localhost:1521:JLNDB" 
    username="db" 
    password="db" 
    maxActive="10000" 
    maxIdle="10000" 
    maxWait="10000" 
    removeAbandoned="true" 
    removeAbandonedTimeOut="10" 
    logAbandoned="true"/>
   </Context>

 

注释:

path指定访问Web应用的URL入口,注意/myweb,而不是myweb,必须有/。

docBase:表示的项目的具体路径。

 

< Resource >元素为JNDI,在lookup是要查找的资源,name: 表示JNDI在lookup是输入的资源名。

 

auth:是连接池管理权属性,Container表示容器管理。

name:表示你的连接池的名称也就是你要访问连接池的地址。

type:是对象的类型。

driverClassName:是数据库驱动的名称。

url:是数据库的地址。

username:是登陆数据库的用户名。

password:是登陆数据库的密码。

MaxActive:连接池的最大数据库连接数。设为0表示无限制。

maxIdle:最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。

maxWait :最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。

removeAbandoned:是否自我中断,默认是 false 。

removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值。
logAbandoned:是否记录中断事件, 默认为 false。

 

注意:

其中factory="org.apache.commons.dbcp.BasicDataSourceFactory" 也可以配置

factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 

 

 

 

*maxActive:最大连接数据库连接数,设 0 为没有限制
*maxIdle:最大等待连接中的数量,设 0 为没有限制
*maxWait:最大等待毫秒数, 单位为 ms, 超过时间会出错误信息

 

 

2.在web.xml中加入配置信息:

数据库资源映射信息

 

 <resource-ref id="db">
    <description>DB Connection</description>
    <res-ref-name>jdbc/jlndb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
 </resource-ref>

 

其中id可以不写。

 

 

注意:这里我没有配置web.xml也成功了。

 

3.添加架包,确认tomcat的common/lib或者lib目录下存在如下架包:DBCP的依赖包:

commons-pool.jar

commons-dbcp.jar

数据库的驱动包:我们这里用的是oracle 10g。

ojdbc14.jar

ojdbc14_g.jar

另外再确保存在

naming-resources.jar

naming-factory.jar

naming-common.jar

commons-collections.jar

jndi.jar

4.编写测试jsp名test.jsp

在myweb目录下建立test.jsp内容如下:

 

 <%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<head>
<title>my jdbc action</title>
</head>
<body>
<h2>连接池测试</h2>
<%
 Connection con = null;
 Statement stmt = null;
 ResultSet rs = null;
 DataSource ds = null;
 String str=null;
%>
<%
  try {
  //找到驱动程序并注册
  Context initContext = new InitialContext();
  Context envContext = (Context) initContext.lookup("java:/comp/env");
  //取得数据源
  ds = (DataSource) envContext.lookup("jdbc/jlndb");
  //以下为另一种取得数据源的方式
  //ds = (DataSource) initContext.lookup("java:comp/env/jdbc/jlndb");
  //取得数据库连接
  con = ds.getConnection();
  if (envContext == null) {
   System.out.println("envContext is null");
  } else {
   System.out.println("envContext is not null");
  }

  if (ds == null) {
   System.out.println("ds is null");
  } else {
   System.out.println("ds is not null");
  }

  if (con == null) {
   System.out.println("con is null");
  } else {
   System.out.println("con is not null");
  }
        //创建Statement
  stmt = con.createStatement();
        //创建sql
  String query = "SELECT * FROM DB.TBHLUSER";
        //执行查询sql
  rs = stmt.executeQuery(query);
  while (rs.next()) {
   str = rs.getString(2);
   System.out.println(str);
  }

 } catch (SQLException e) {
  e.printStackTrace();
 }

 finally {

  if (con != null) {
   con.close();
  }

 }
%>
打印从数据库中取得的数据:
<%=rs.toString()%>
<br>
<%=str%>

</body>
</html>

 

5.在oracle数据中实例jlndb中建表并添加数据:

建立表tbhluser:

 CREATE TABLE tbhluser (
  id VARCHAR (4) DEFAULT '' NOT NULL,
  name VARCHAR (30) DEFAULT '' ,
  password  VARCHAR (16) DEFAULT '' ,
  groupId VARCHAR (50) DEFAULT '' ,
  grade VARCHAR (2) DEFAULT '',
  PRIMARY KEY(id)
);

 

添加数据:

 insert into db.tbhluser VALUES ('1', 'yuli', 'yuli', 'yuli', 'yl')

 

6.启动tomcat,在浏览器中输入http://localhost:8080/myweb/test.jsp

如果看到如下信息

连接池测试

打印从数据库中取得的数据: org.apache.commons.dbcp.DelegatingResultSet@908881
yuli

 

则表示配置成功。