?
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.xml的GlobalNamingResources中增加?
?
<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.xml的Context中增加:
<ResourceLink?global="jdbc/mydb"?name="jdbc/mydb"?type="javax.sql.DataSource"/>???
这样就可以了。
方式二、全局数据库连接池?
1、同上
2、在tomcat/conf/context.xml的Context中增加:?
?
<Resource?name="jdbc/mydb"?type="javax.sql.DataSource"?password="mypwd"?driverClassName="com
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc 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连接了,这也说明这个文件并没有真正起作用。查看了tomcat下conf\context.xml也没有设置db的连接池。那是哪个文件在起作用呢?折腾了办法,后来发现tomcat在conf\Catalina\localhost下生成了一个和原来META-INF\context.xml相同内容的文件,怀疑一定是这个文件在起作用?删除conf\Catalina\localhost目录,重启tomcat,问题消失。
Tomcat6.0 连接池的配置3
?
不管是tomcat5,Tomcat5.5或Tomcat6.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版本,更容易.
?
?注:也许你认为配置这边文章很简单,配置数据源连接池也很简单.但是对于初学者来说,可能是困窘他好久的问题.这方面以前我深有体会.大家都是这样过来的.??仅供参考.
?