zoukankan      html  css  js  c++  java
  • Tomcat连接池配置与实现/JNDI

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

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

      配置连接池

    <?xml version='1.0' encoding='utf-8'?>
    <Context>
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
        <!--配置oracle数据库的连接池-->
        <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" />
    
        <!--配置mysql数据库的连接池, 
            需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下        
            maxIdle 连接池中最多可空闲maxIdle个连接 
            minIdle 连接池中最少空闲maxIdle个连接 
            initialSize 初始化连接数目 
            maxWait 连接池中连接用完时,新的请求等待时间,毫秒 
            username 数据库用户名
            password 数据库密码
            -->
        <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" />
    
    
            <Resource name="HDHTRMDS"
                auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:sqlserver://localhost:1438;DatabaseName=tcnvmms"
                username="sa"
                password="sa"
                maxActive="100"
                maxIdle="30"
                maxWait="10000"
                 validationQuery="select 1"
                 testWhileIdle="true"
                 timeBetweenEvictionRunsMillis="8000"
                 minEvictableIdleTimeMillis="10000"/>
    
    </Context>
    

      

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

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

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

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

    在<web-app></web-app>节点中加入下面内容

     

    <resource-ref>
          <description>mysql数据库连接池</description>
          <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->
          <res-ref-name>jdbc/mysqlds</res-ref-name>
          <!-- 资源类型 -->
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
          <res-sharing-scope>Shareable</res-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" %>
    <html>     
    <head>     
    <title>Tomcat6.0 JNDI!</title>    
    </head>    
      <body>      
       Tomcat连接池测试,获取数据源 <br>     
        <%     
            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("<span style='color:red;'>JNDI测试成功<span>");     
            } catch (NamingException e) {     
                e.printStackTrace();     
            } catch (SQLException e) {     
                e.printStackTrace();     
            }     
        %>     
      </body>     
    </html>   
    
    

    方法二:Tomcat的conf/server.xml中配置

    打开tomcat的conf/server.xml文件,找到<GlobalNamingResources></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" />
    </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" />
    
                 <!--配置mysql数据库的连接池, 
                    需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下        
                   -->
                 <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>
    复制代码
    

      

    在tomcat的conf/context.xml文件中的<Context></Context>节点中加入如下内容

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

      

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

    <resource-ref>
          <description>mysql数据库连接池</description>
          <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->
          <res-ref-name>jdbc/mysqlds</res-ref-name>
          <!-- 资源类型 -->
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
          <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    

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

    方法三:在Tomcat的conf/server.xml中配置虚拟目录时配置 

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

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

    在tomcatconf下server.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.如下图:

    方法四:在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>
    

      

    转地址:

    http://blog.csdn.net/yetaodiao/article/details/12836993

  • 相关阅读:
    oracle归档空间不足的问题(rman删除归档日志)
    oracle DG查看延时时间
    Convert JS object to JSON string
    转:微信公众平台开发(80) 上传下载多媒体文件
    生成带参数的二维码
    关闭微信浏览器可以使用
    微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏
    如何隐藏微信公众平台右上角按钮
    微信公众平台服务号、订阅号的相关说明选择字号:
    微信公众平台群发消息的方法及注意事项
  • 原文地址:https://www.cnblogs.com/8899man/p/6430466.html
Copyright © 2011-2022 走看看