Tomcat数据库连接池的配置方法总结(叶涛为您解答)

实例使用的Tomcat版本为6.0

方法一Tomcatconf/context.xml中配置
Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值如下:

xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xmlWatchedResource>
Context>

配置连接池

复制代码
xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xmlWatchedResource>

    
    <Resource name="jdbc/oracleds"
        author="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="scott"
        password="tiger"
        driverClassName="oracle.jdbc.dirver.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" />

    
    <Resource name="jdbc/mysqlds" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="root" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog" />

Context>
复制代码

配置好后需要注意的两个步骤

1.将对应数据库的驱动类放到tomcatlib目录西安

2.重新启动tomcat服务器,让配置生效

web应用程序的web.xml中设置数据源参考,如下:

节点中加入下面内容

复制代码
<resource-ref>
      <description>mysql数据库连接池description>
      
      <res-ref-name>jdbc/mysqldsres-ref-name>
      
      <res-type>javax.sql.DataSourceres-type>
      <res-auth>Containerres-auth>
      <res-sharing-scope>Shareableres-sharing-scope>
resource-ref>
复制代码

 

错误解决

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)

解决方案:

上面的异常信息是配置文件中JNDI没有初始化造成的

如果下面的问题都不存在

1.要去检查下配置文件中连接数据库的URL参数是否正确2.以及是否导入了正常的包3.检查在Tomcat中conf/server.xml文件,检查是否设置useNaming="false",如果是,去掉

2.那就是通过main方法测试的,这个数据源不支持这样的测试方法,程序要运行在Tomcat中才能找到相应的数据源.[我在测试时犯这样的错导致上面错误出现]

复制代码
<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>     
<%@ page import="java.sql.*" %>     
<%@ page import="javax.naming.*" %>     
<%@ page import="javax.sql.DataSource" %>
     
     
Tomcat6.0 JNDI!    
    
        
   Tomcat连接池测试,获取数据源 
<% try { //初始化查找命名空间 Context ctx = new InitialContext(); //参数java:/comp/env为固定路径 Context envContext = (Context)ctx.lookup("java:/comp/env"); //参数jdbc/mysqlds为数据源和JNDI绑定的名字 DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds"); Connection conn = ds.getConnection(); conn.close(); out.println("JNDI测试成功"); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } %>
复制代码

运行效果:

 

Tomcat数据库连接池的配置方法总结(叶涛为您解答)_第1张图片

 

 

方法二:Tomcatconf/server.xml中配置

打开tomcatconf/server.xml文件,找到节点,默认的内容如下

复制代码
<GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
GlobalNamingResources>
复制代码

在该节点中加入相关的池配置信息,如下

复制代码
  <GlobalNamingResources>
             <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />

             
             <Resource name="jdbc/mysqlds" 
              auth="Container" 
              type="javax.sql.DataSource" 
              username="root" 
              password="root" 
              maxIdle="30" 
              maxWait="10000" 
              maxActive="100"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/db_blog" />
  GlobalNamingResources>
复制代码

tomcatconf/context.xml文件中的节点中加入如下内容

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

然后在web项目中的WEB-INF目录下的web.xml中配置

复制代码
<resource-ref>
      <description>mysql数据库连接池description>
      
      <res-ref-name>jdbc/mysqldsres-ref-name>
      
      <res-type>javax.sql.DataSourceres-type>
      <res-auth>Containerres-auth>
      <res-sharing-scope>Shareableres-sharing-scope>
resource-ref>
复制代码

同样配置好后,需要重新启动服务器,让配置生效.

 

 

 

方法三:Tomcatconf/server.xml中配置虚拟目录时配置 

在配置虚拟目录时,也就是在配置conf下面的server.xml,context标签内添加池配置.

在说该方法之前,先说一下,如何用tomcat配置虚拟目录

tomcat\confserver.xml中找到

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
Host>

在其中添加:

<Context path="/website" docBase="F:/myweb" reloadable="true">Context>

注意:

docBase要改成你的项目目录。

path为虚拟路径,访问时的路径,注意:一定要加“/” debug建议设置为0

reloadable设置为true。  

这样重新启动tomcat

实例中如下配置

<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true">
Context>

接下来添加池配置,如下

复制代码

<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true">
            <Resource name="jdbc/mysqlds" 
            auth="Container" 
            type="javax.sql.DataSource" 
            username="root" 
            password="root" 
            maxIdle="30" 
            maxWait="10000" 
            maxActive="100"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/db_blog"
            />
Context>
复制代码

启动服务器,测试,注意因为我们配置了path值为/website,所以访问的路径应该为website.如下图:

Tomcat数据库连接池的配置方法总结(叶涛为您解答)_第2张图片

 

方法四:在Web项目中的META-INF目录下新建一个文件context.xml,写入配置

注意:META-INF目录下,不是WEB-INF目录下

复制代码
xml version='1.0' encoding='utf-8'?>
<Context>
    <Resource name="jdbc/mysqlds" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="root" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog"
        logAbandoned="true" />
Context>
复制代码

你可能感兴趣的:(java,叶涛-专注于互联网优化,推广,品牌建设)