• 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.*的版本。

  • 相关阅读:
    Django配置MySQL数据库教程
    给大家发个Python和Django的福利吧,不要钱的那种~~~
    Django 设置admin后台表和App(应用)为中文名
    Django 配置JWT认证方式
    威联通(NAS)应用篇:自建OwnCloud网盘(百度网盘,拜拜~~~)
    请不要浪费你的生命,一文多发推广就用它(OpenWrite)
    Django ORM 查询表中某列字段值
    【Django 2.2文档系列】Model 外键中的on_delete参数用法
    嵌入式、C语言位操作的一些技巧汇总
    【RT-Thread笔记】IO设备模型及GPIO设备
  • 原文地址:https://www.cnblogs.com/wayne173/p/4095077.html
Copyright © 2020-2023  润新知