当前位置: 代码迷 >> Web前端 >> Tomcat6.0连接池配备的几种方式
  详细解决方案

Tomcat6.0连接池配备的几种方式

热度:487   发布时间:2012-08-24 10:00:21.0
Tomcat6.0连接池配置的几种方式

?

Tomcat6.0连接池配置1
?1.
配置tomcat下的conf下的context.xml文件,在之间添加连接池配置: <Resource?name="jdbc/oracle"

???????auth="Container"??????? ??

???????type="javax.sql.DataSource"??????? ??

???????driverClassName="oracle.jdbc.driver.OracleDriver"??????? ??

???????url="?jdbc:oracle:thin:@host:port:databse"??????? ??

???????username="?user?"??????? ??

???????password="password"??????? ??

???????maxActive="100"??????? ??

???????maxIdle="30"??????? ??

??????maxWait="10000"?/>??

2.配置你的应用下的web.xml中的之间加入:

<resource-ref>??????? ??

????<description>DB?Connection</description>??????? ??

????<res-ref-name>jdbc/oracle</res-ref-name>??????? ??

????<res-type>javax.sql.DataSource</res-type>??????? ??

????<res-auth>Container</res-auth>??????? ??

??</resource-ref>????

3.把连接数据库的第三方驱动放到common/lib下面就ok?


Tomcat5.5x
连接池配置?

方式一、全局数据库连接池
1
、通过管理界面配置连接池,或者直接在tomcat/conf/server.xmlGlobalNamingResources中增加?

?

<Resource?name="jdbc/mydb"? ??

??type="javax.sql.DataSource"??

??password="mypwd"??

??driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"??

??maxIdle="2"??

??maxWait="5000"??

??validationQuery="select?1"??

??username="sa"??

??url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"??

??maxActive="4"/>??

2、在tomcat/webapps/myapp/META-INF/context.xmlContext中增加:

<ResourceLink?global="jdbc/mydb"?name="jdbc/mydb"?type="javax.sql.DataSource"/>???

这样就可以了。
方式二、全局数据库连接池
?
1
、同上

2
、在tomcat/conf/context.xmlContext中增加:?

?

<Resource?name="jdbc/mydb"?type="javax.sql.DataSource"?password="mypwd"?driverClassName="com

参数说明:
driveClassName
JDBC驱动类的完整的名称;

maxActive
:同时能够从连接池中被分配的可用实例的最大数;
maxIdle
:可以同时闲置在连接池中的连接的最大数;

maxWait
:最大超时时间,以毫秒计;

password
:用户密码;

url
:到JDBCURL连接;

user
:用户名称;

validationQuery
:用来查询池中空闲的连接。

以上三种方式在tomcat 5.5.4下都可以。另外,sql serverjdbc driver是从微软网站上下载的sql server jdbc (sp3)

???
tomcat5.0
连接池配置

tomcat 的下面路径(Tomcat /conf/Catalina/localhost)下建一个xml文件,文件名为当前WEB应用名,内容如下

<Resource?name="jdbc/test"?auth="Container"?type="javax.sql.DataSource"/>???? ??

????<ResourceParams?name="jdbc/test">???? ??

????????<parameter>???? ??

????????????<name>factory</name>???? ??

????????????<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>???? ??

????????</parameter>???? ??

????????<!--?Maximum?number?of?dB?connections?in?pool.?Make?sure?you???? ??

?????????????configure?your?mysqld?max_connections?large?enough?to?handle???? ??

?????????????all?of?your?db?connections.?Set?to?0?for?no?limit.???? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>maxActive</name>???? ??

????????????<value>100</value>???? ??

????????</parameter>???? ??

????????<!--?Maximum?number?of?idle?dB?connections?to?retain?in?pool.???? ??

?????????????Set?to?0?for?no?limit.???? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>maxIdle</name>???? ??

????????????<value>30</value>???? ??

????????</parameter>???? ??

????????<!--?Maximum?time?to?wait?for?a?dB?connection?to?become?available???? ??

?????????????in?ms,?in?this?example?10?seconds.?An?Exception?is?thrown?if??? ??

?????????????this?timeout?is?exceeded.??Set?to?-1?to?wait?indefinitely.???? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>maxWait</name>???? ??

????????????<value>10000</value>???? ??

????????</parameter>???? ??

????????<!--?MySQL?dB?username?and?password?for?dB?connections??-->???? ??

????????<parameter>???? ??

????????????<name>username</name>???? ??

????????????<value>sa</value>???? ??

????????</parameter>???? ??

????????<parameter>???? ??

????????????<name>password</name>???? ??

????????????<value>test</value>???? ??

????????</parameter>???? ??

????????<!--?Class?name?for?JDBC?driver?-->???? ??

????????<parameter>???? ??

????????????<name>driverClassName</name>???? ??

????????????<value>net.sourceforge.jtds.jdbc.Driver</value>???? ??

????????</parameter>???? ??

????????<!--?Autocommit?setting.??This?setting?is?required?to?make???? ??

?????????????Hibernate?work.??Or?you?can?remove?calls?to?commit().?-->???? ??

????????<parameter>???? ??

????????????<name>defaultAutoCommit</name>???? ??

????????????<value>true</value>???? ??

????????</parameter>???? ??

????????<!--?The?JDBC?connection?url?for?connecting?to?your?MySQL?dB.???? ??

?????????????The?autoReconnect=true?argument?to?the?url?makes?sure?that?the???? ??

?????????????mm.mysql?JDBC?Driver?will?automatically?reconnect?if?mysqld?closed?the???? ??

?????????????connection.??mysqld?by?default?closes?idle?connections?after?8?hours.???? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>url</name>???? ??

????????????<value>jdbc:jtds:sqlserver://url/filedb;charset=gb2312;autoReconnect=true</value>???? ??

????????</parameter>???? ??

????????<!--?Recover?abandoned?connections?-->???? ??

????????<parameter>???? ??

????????????<name>removeAbandoned</name>???? ??

????????????<value>true</value>???? ??

????????</parameter>???? ??

????????<!--?Set?the?number?of?seconds?a?dB?connection?has?been?idle????? ??

?????????????before?it?is?considered?abandoned.????? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>removeAbandonedTimeout</name>???? ??

????????????<value>60</value>???? ??

????????</parameter>???? ??

????????<!--?Log?a?stack?trace?of?the?code?which?abandoned?the?dB????? ??

?????????????connection?resources.????? ??

?????????????-->???? ??

????????<parameter>???? ??

????????????<name>logAbandoned</name>???? ??

????????????<value>true</value>???? ??

????????</parameter>???? ??

????</ResourceParams>??

?

?

?

?

Tomcat6.0 连接池的配置2

配置步骤如下:1.Tomcat 6的配置和以前的不同了,不推荐在server.xml中进行配置,而是在%Tomcat_Home%\webapps\yourApp\META-INF \context.xml中进行配置才是更好的方法。而不是以前版本%Tomcat_Home%\conf下的context.xml文件。这样就可以在不同的web应用下单独配置连接池了,且Tomcat会自动重载。当然你也可以更改%Tomcat_Home%\conf下的context.xml文件,将所有web应用下的连接池进行统一配置。

2.将代码修改如下:

view plaincopy to clipboardprint?
<Context reloadable="true">?
??? <WatchedResource>WEB-INF/web.xml</WatchedResource>?
??? <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"???
??? maxActive="100"???
??? maxIdle="30"?
??? maxWait="10000"?
??? username="scott"???
??? password="tiger"?
??? driverClassName="oracle.jdbc.driver.OracleDriver"?
??? url="jdbc:oracle:thin:@localhost:1521:ora9"/>?
</Context>?
<Context reloadable="true">
??? <WatchedResource>WEB-INF/web.xml</WatchedResource>
?<Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
?maxActive="100"
?maxIdle="30"
?maxWait="10000"
?username="scott"
?password="tiger"
?driverClassName="oracle.jdbc.driver.OracleDriver"
?url="jdbc:oracle:thin:@localhost:1521:ora9"/>
</Context>

name 为当前数据源JNDI的名字,可以随意设定;

auth 为验证方式;

type 资源类型;

driverClassName Oracle驱动引用;

maxActiv 为连接池最大激活的连接数,设为0表示无限制;

maxIdle 为连接池最大空闲的连接数,数据库连接的最大空闲时间。超过空闲时间,

??????????? 数据库连接将被标记为不可用,然后被释放。设为0表示无限制;

maxWait 为连接最大的等待时间,单位毫秒,如果超过此时间将接到异常。设为-1

????????????? 表示无限制。;

username oracle数据库的一个用户名;

password username的密码;

url 为连接oracle的连接地址;

注:本人尝试将代码“driverClassName="oracle.jdbc.driver.OracleDriver"”改为“driverClassName="oracle.jdbc.OracleDriver"”程序依然运行正常,刚开始以为老师的代码有问题

3.在程序中的调用形式为:

view plaincopy to clipboardprint?
Context context = new InitialContext();??
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");??
Connection conn = ds.getConnection();?
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
Connection conn = ds.getConnection();

注:“java:/comp/env/jdbc/oracleds”红色标记文字为步骤1里设置的Resource name

则可以将建立connection的方式以上述形式取代传统方式:

view plaincopy to clipboardprint?
String driver = "oracle.jdbc.driver.OracleDriver";??
String url = "jdbc:oracle:thin:@localhost:1521:ora9";??
String username = "scott";??
String password = "tiger";??
Class.forName(driver);??
Connection conn = DriverManager.getConnection(url, username, password);?
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:ora9";
String username = "scott";
String password = "tiger";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);

4.另外还需将用到的jdbc驱动类库导入到%Tomcat_Home%\lib目录下

否则会抛出如下异常:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

依上述步骤就能成功的配置Tomcat6.0 连接池,还有网友贴文说需

web.xml文件中的web-app节点下加入如下代码形式:
<resource-ref>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>

因本人未添加此项,程序依然正确,故本人认为此步骤为非必要项

今天需要在另一台机器上重新部署系统,重新设置db的连接池。当我把tomcat拷贝到那台机器,并且修改META-INF\context.xml,然后重新启动tomcat,但发现系统连接的仍然是老的db。再次检查了META-INF\context.xml文件,确信了这个文件已经正确设置db连接了,这也说明这个文件并没有真正起作用。查看了tomcatconf\context.xml也没有设置db的连接池。那是哪个文件在起作用呢?折腾了办法,后来发现tomcatconf\Catalina\localhost下生成了一个和原来META-INF\context.xml相同内容的文件,怀疑一定是这个文件在起作用?删除conf\Catalina\localhost目录,重启tomcat,问题消失。

Tomcat6.0 连接池的配置3

?

不管是tomcat5,Tomcat5.5Tomcat6.0. 用下面的这两中方法配置连接池,都可以成功.

?

?1.?应该算是全局的连接池的配置

??

???? (1).不管是tomcat5 还是tomcat6 ,都首先找到Tomcat目录下面的conf目录中的server.xml文件.

?????????? 找到<GlobalNamingResources> </GlobalNamingResources>这对标签.

????????将这样的一段配置加到标签中间.

??????? <Resource? ??

????name="jdbc/TestDB"? ??

????auth="Container"???????? ??

????????????????type="javax.sql.DataSource"??

????driverClassName="com.mysql.jdbc.Driver"? ??

url="jdbc:mysql://localhost:3306/test?autoReconnect=true"??

????????maxActive="50"? ??

????maxldle="10"? ??

????maxWait="5000"??

????username="root"??

password="admin"?/>??

当然,样例是使用 MYSQL配置, 根据不同的需要,url,driverClassName,username,passsword等参数改变就行.

??????? ?然后再找到和server.xml同目录下面的context.xml文件.

?? <Context></Context>标签中添加如下配置.

<ResourceLink?global="jdbc/TestDB"?name="jdbc/TestDB"?type="javax.sql.DataSource"/>??

global="jdbc/TestDB"?中的参数值("jdbc/TestDB")必须和上一段<Resource >配置中的name属性的值保持一样.

???? name="jdbc/TestDB" 这个可以随便取,但是在程序中调用的时候,就应该与name的值保持一致.

?????到这里,连接池已经配置好啦

写个jsp测试

<%@?page?language="java"?pageEncoding="gbk"%> ??

<%@page?import="java.sql.Connection"%> ??

<%@page?import="javax.naming.Context"%> ??

<%@page?import="javax.naming.InitialContext"%> ??

<%@page?import="javax.sql.DataSource"%> ??

<%@page?import="java.sql.Statement"%> ??

<%@page?import="java.sql.ResultSet"%> ??

<%? ??

???//连接池的获取 ??

????Connection?conn?=?null; ??

????DataSource?ds?=?null; ??

????ResultSet?rs??=null; ??

????Statement?stmt?=?null; ??

????Context?initCtx?=?new?InitialContext(); ??

????ds?=(DataSource)initCtx.lookup("java:comp/env/jdbc/TestDB"); ??

???if(ds!=null){ ??

????????out.println("已经获得DataSource!");? ??

????????out.println("<br>"); ??

????????conn?=?ds.getConnection(); ??

???????try{ ??

????????stmt?=?conn.createStatement(); ??

????????String?sql?="select?*?from?tree_table"; ??

????????rs?=?stmt.executeQuery(sql); ??

????????out.println("以下是从数据库中读取出来的数据:<br>"); ??

????????????while(rs.next()){ ??

????????????????out.println("<br>"); ??

????????????????out.println(rs.getString("nodeName")); ??

????????????} ??

???????}catch(Exception?ex){ ??

?????????ex.printStackTrace(); ??

???????}finally{ ??

??????????conn.close(); ??

??????????rs.close(); ??

??????????stmt.close(); ??

???????} ??

???} ??

%>??

在这ds =(DataSource)initCtx.lookup("java:comp/env/jdbc/TestDB");这句代码中的jdbc/TestDB必须和

??? <ResourceLink global="jdbc/TestDB" name="jdbc/TestDB"?........ />中的name 属性保持一样.

???? "lookup("java:comp/env/..."这都是固定写法.

??

??? 2.??应该算是局部的连接池的配置吧.(针对工程而言)

?????? 本身我们的工程中META-INF 中,没有context.xml文件,

???????例如 :E:\apache-tomcat-5.5.16\webapps\myproj\META-INF\

?????

?????? 此时我们可以在META-INF目录下面新建一个context.xml文件.

????? 里面写下如下的配置,具体的配置参数,按需改变.

Xml代码

<?xml?version="1.0"?encoding="UTF-8"?>??

<Context?reloadable="true"?crossContext="true">??

<Resource? ??

name="jdbc/TestDB"? ??

auth="Container"? ??

type="javax.sql.DataSource"??

driverClassName="com.mysql.jdbc.Driver"? ??

url="jdbc:mysql://localhost:3306/test?autoReconnect=true"??

maxActive="50"? ??

maxldle="10"? ??

maxWait="5000"??

username="root"??

password="admin"? ??

/>??

</Context>??

这样子,连接池,也就配置好啦,并不需要修改tomcat里面的文件。仅仅在我们的工程中的META-INF目录加入一个context.xml配置文件就好啦.tomcat版本,更容易.

?

?:也许你认为配置这边文章很简单,配置数据源连接池也很简单.但是对于初学者来说,可能是困窘他好久的问题.这方面以前我深有体会.大家都是这样过来的.??仅供参考.

?

  相关解决方案