zoukankan      html  css  js  c++  java
  • Tomcat 下 mysql的连接池配置和使用

    最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习。

    先把我自己的方法写出来,再说下网上其他的没有成功的方法。

    1、首先当然是先把mysql的jar包放在lib目录下,toncat的或者自己项目的lib下都可以。

    2、在tomcat的conf目录下的server.xml里添加如下内容,要添加在 <Host></Host>之间

    <Context path="/myexample" docBase="myexample" crossContext="true">
    <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
    username="root"
    password="root"
    maxActive="850"
    maxidle="80"
    removeAbandoned="true"
    removeAbandonedTimeout="5"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/test?autoReconnect=true"
    minEvictableIdleTimeMillis="4000"
    timeBetweenEvictionRunsMillis="5000"/>
    </Context>

    或者在 Tomcat 的 confCatalinalocalhost 下新建一个 项目名.xml 文件 (推荐这个方式)

    里面的内容为

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/myexample" docBase="myexample" crossContext="true">
    <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
    username="root"
    password="root"
    maxActive="850"
    maxidle="80"
    maxWait="10000"
    removeAbandoned="true"
    removeAbandonedTimeout="5"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/test?autoReconnect=true"
    minEvictableIdleTimeMillis="4000"
    timeBetweenEvictionRunsMillis="5000"/>
    </Context>

    下面对里面几个比较重要的参数进行一下说明:
    name:表示你的连接池的名称也就是你要访问连接池的地址
    auth:是连接池管理权属性,Container表示容器管理
    type:是对象的类型
    driverClassName:是数据库驱动的名称
    url:是数据库的地址
    username:是登陆数据库的用户名
    password:是登陆数据库的密码
    maxActive:最大连接数据库连接数,设 0 为没有限制
    maxIdle:最大等待连接中的数量,超过空闲时间,数据库连 接将被标记为不可用,然后被释放。设为0表示无限制。 
    maxWait:最大建立连接等待时间, 单位为 ms, 如果超过此时间将接到异常。设为-1表示 无限制。 
    一般把maxActive设置成可能的并发量就行了

    然后配置就完成了,下面就是使用。

    try {
    // 初始化查找命名空间
    Context initContext = new InitialContext();
    Context envContext = (Context)initContext.lookup("java:/comp/env");
    // 找到DataSource
    DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");
    Connection connection = ds.getConnection();

    ……之后就和普通的数据库连接使用是一样的。

    }catch(Exception ex) {

      out.println(ex.toString());

    }

    最好用try catch 包裹下。

    下面说下网上看的别的没有成功的,有的说在项目目录的META-INF 目录下建一个content.xml放上上面的内容,我试了,没成功。

    还有的说需要应用程序下的web.xml中的之间加入:  

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

    我试了,加不加这个没什么影响。

    不成功或没影响的可能和版本有关,我没有试他们说的那个6.0的版本,我用的8.*的版本。

  • 相关阅读:
    [BUUOJ记录] [ZJCTF 2019]NiZhuanSiWei
    [BUUOJ记录] [BJDCTF2020]EasySearch
    [BUUOJ记录] [BJDCTF2020]The mystery of ip
    php版本:实现过滤掉广告、色情、政治相关的敏感词
    热门搜索词获取java版
    如何用代码挖局长尾关键词
    几行python代码解决相关词联想
    如何高效的完成中文分词?
    python 脚本撞库国内“某榴”账号
    搜索引擎之全文搜索算法功能实现(基于Lucene)
  • 原文地址:https://www.cnblogs.com/wayne173/p/4095077.html
Copyright © 2011-2022 走看看