zoukankan      html  css  js  c++  java
  • Eclipse+Tomcat7.0+MySQL 连接池设置

    http://blog.sina.com.cn/s/blog_85d71fb70101ab99.html

    工程名:JavaWeb

    第一步:配置server.xml

    在Tomcat的server.xml文件中</host>之前添加如下配置信息:

    <Context path="/JavaWeb" docBase="JavaWeb" debug="5" reloadable="true" crossContext="true" source="org.eclipse.jst.jee.server:JavaWeb">
            <Resource name="jdbc/DBCP"
                        auth="Container"
                        type="javax.sql.DataSource"
                        maxActive="100"
                        maxIdle="30"
                        maxWait="10000"
                        username="root"
                        password=""
                        driverClassName="com.mysql.jdbc.Driver"
                        url="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true"/>
    </Context>

    <context>各属性的含义如下:

    (1)path:web应用的context路径。catalina将每个URL的起始和context path进行比较,选择合适的web应用处理该请求。特定Host下的context path必须是惟一的。如果context path为空字符串(""),这个context是所属Host的缺省web应用,用来处理不能匹配任何context path的请求。

    (2)docBase:该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。

    (3)debug:与这个Engine关联的Logger记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。

    (4)reloadable:如果希望Catalina监视/WEB-INF/classes/和/WEB-INF/lib下面的类是否发生变化,在发生变化的时候自动重载web application,设为true。这个特征在开发阶段很有用,但也大大增加了服务器的开销。因此,在发布以后,不推荐使用。但是,你可以使用 Manager应用在必要的时候触发应用的重载。

    (5)crossContext:如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他web application的request dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。

    (6)source:还没弄清楚是什么作用。

    <Resource>各属性的含义如下:

    (1)name:指定Resource的JNDI名字。

    (2)auth:指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示由容器来创建和管理Resource,Application表示由web应用来创建和管理Resource。

    (3)type:指定Resource的Java类名。
    (4)maxActive: 池中连接的最大数目。要确保让 MySQL 的最大连接数大于这个值。如果其值为 0,则没有最大数量限制。
    (5)maxIdle:池中最大空闲数据库连接数。如果其值为-1,则没有限制。(有的博客说值为0表示不受限制)
    (6)maxWait:等待一个连接变成可用的最长时间,单位是 ms。这个例子中该值为 10 s如果超时将抛出异常。如果设置为-1,将无限等待。
    (7)username password:连接 MySQL 数据库的用户名和口令。
    (8)driverClassNameMySQL 数据库的 JDBC 驱动程序的名字,这里的名字是'com.mysql.jdbc.Driver'
    (9)urlJDBC 连接 MySQL 数据库的 url。其中'127.0.0.1'是要连接的数据库服务器的ip,'3306'是数据库服务器端口,'test'是数据库名。参数 autoReconnect=true 确保连接池能够重新连接。如果 8 个小时没有操作,MySQL 管理器会关闭连接。

    第二步:配置WEB-INF/lib/web.xml文件

            如果web应用访问了有Servlet容器管理的某个JNDI资源,那么必须在web.xml文件中声明对这个JNDI资源的引用。表示资源引用的元素为<resource-ref>,以下是声明引用jdbc/BookDB数据源的代码:

    <resource-ref>   
      <description>DB Connection</description>
      <res-ref-name>jdbc/DBCP</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>

    <resource-ref>属性说明:

    1)description:对所引用的资源的说明。

    2)res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应。

    3)res-type:指定所引用资源的类名,与<Resource>元素中的type属性对应。

    4)res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应。

    第三步:Java调用

     1 //连接池
     2         try {            
     3             Context initContext = new InitialContext();
     4             Context envContext = (Context)initContext.lookup("java:/comp/env");
     5             DataSource ds = (DataSource)envContext.lookup("jdbc/DBCP");
     6             Connection connect = ds.getConnection();
     7             System.out.println("Success connect Mysql server (DBCP)!");
     8             res=true;
     9         } catch (Exception e) {
    10             System.out.print("error connect Mysql server(DBCP)!");
    11             e.printStackTrace();
    12         }

    其中第4行中lookup()的参数我是直接复制的,没有修改,还不懂是什么意思。

    第5行中lookup()的参数是前两步中设置的JNDI名字

    在程序中遇到了错误:org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource

    经查是引入的包不对。本项目中正确的包是

    1 import javax.naming.Context;
    2 import javax.naming.InitialContext;
    3 //import org.apache.tomcat.jdbc.pool.DataSource;
    5 import javax.sql.DataSource;

    比较发现“javax.sql.DataSource”就是第一步中<Resource> 的type属性,也是第二步中<resource-ref>的<res-type>值。

  • 相关阅读:
    Redis Sentinel 哨兵模式
    Redis 读写分离
    Redis 分布式锁实现
    Redis 缓存的收益和成本
    Redis 实现排行榜
    Spring Boot 使用 Cache 缓存
    Spring Boot 整合 Redis
    Spring Boot 使用阿里巴巴 Druid 数据源
    Spring Boot 整合 JWT
    B1003
  • 原文地址:https://www.cnblogs.com/anan1688/p/4497583.html
Copyright © 2011-2022 走看看