tomcat局部连接池配置
这里我的Tomcat版本为6.0,这个版本应该说是Tomcat比较稳定的一个版本。
首先备份你的$TomcatHome$/conf/server.xml文件($TomcatHome$是指你的tomcat安装路径),然后在<Host>节点下添加:
- <Context path= "/pool" docBase= "pool" >
- <Resource name="jdbc/test" scope= "Shareable" type= "javax.sql.DataSource" />
- <ResourceParams name="jdbc/test" >
- <parameter>
- <name>factory</name>
- <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
- </parameter>
- <!-- DBCP database connection settings -->
- <parameter>
- <name>url</name>
- <value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=pubs</value>
- </parameter>
- <parameter>
- <name>driverClassName</name>
- <value>net.sourceforge.jtds.jdbc.Driver</value>
- </parameter>
- <parameter>
- <name>username</name>
- <value>sa</value>
- </parameter>
- <parameter>
- <name>password</name>
- <value>sa</value>
- </parameter>
- <!-- DBCP connection pooling options -->
- <parameter>
- <name>maxWait</name>
- <value>3000 </value>
- </parameter>
- <parameter>
- <name>maxIdle</name>
- <value>100 </value>
- </parameter>
- <parameter>
- <name>maxActive</name>
- <value>10 </value>
- </parameter>
- </ResourceParams>
- </Context>
其中红色部分是你需要修改的。
<Context path="/pool" docBase="pool">这里的pool是指你的项目在tomcat发布目录webapps下的目录路径,这里我的项目目录为:.../webapps/pool
<Resource name="jdbc/test"..>jdbc/test为需要通过jndi调用的数据源名称。
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 这里我们用的是dbcp连接池包,这是apache提供的一个免费开源连接池,而且效率和稳定性都不错。如果你使用的是tomcat5x或以上的版本,可 以在$TomcatHome$/common/lib目录下找到它。
关于数据库的设置,这里就不在多说。
下面打开web.xml文件,在其根节点下添加数据源的引用设置。
- <resource-ref>
- <res-ref-name>jdbc/test</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
最后我们在代码中从连接池获得Connection对象。
- Context context = new InitialContext();
- //获得数据源
- DataSource ds = context.lookup("java:comp/env/jdbc/test" );
- //获取连接
- Connection conn = ds.getConnection();
这样我们就在代码中获得了Connection对象,至于剩下的操作,就完全是jdbc操作了。
tomcat全局连接池配置
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 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版本,更容易.
注:也许你认为配置这边文章很简单,配置数据源连接池也很简单.但是对于初学者来说,可能是困窘他好久的问题.这方面以前我深有体会.大家都是这样过来的. 仅供参考.