zoukankan      html  css  js  c++  java
  • mysql连接超时与jndi数据源配置

    昨天有运营说添加活动不能用了,我就看了一下后台日志,发现访问数据库是报错:

            at java.lang.Thread.run(Thread.java:722)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 59,085,803 milliseconds ago.  
    The last packet sent successfully to the server was 59,085,806 milliseconds ago.
    is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application,
    increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. at sun.reflect.GeneratedConstructorAccessor377.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at com.mysql.jdbc.Util.handleNewInstance(Util.java:407) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3358) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1970) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)

    意思就是数据库有长连接,长时间没有使用数据库,并且空闲时间超过了数据库配置的wait_timeout设置的时间。到了wait_timeout的时间,数据库就会释放连接。一般的思路是,改数据库的wait_timeout时间,这个方法可行,但是并不是最好的

    因为,mysql的最大超时时间是2147483。所以我们的逻辑就要转到mysql链接来

    (1) JNDI数据源:

    我们使用的是jndi数据源配置如图:

    <Resource name="jdbc/assistMaster"
              type="javax.sql.DataSource"
              url="jdbc:mysql://weatherDB1:3308/assist"
              driverClassName="com.mysql.jdbc.Driver"
              username="adbconn1"
              password="6vjuN8qC"
              maxActive="30"
              maxIdle="10"
              maxWait="10000"
    />

    需要添加如下的连接测试

     validationQuery = "SELECT 1"
              testWhileIdle = "true"
              timeBetweenEvictionRunsMillis = "3600000"
              minEvictableIdleTimeMillis = "18000000"
              testOnBorrow = "true"

    (2)jdbc数据源配置

    jdbc:mysql://10.10.10.10:3306/mydb?autoReconnect=true

    (3)Spring中使用DBCP连接池,在定义datasource增加属性validationQuery和testOnBorrow

    <bean id="vrsRankDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${countNew.jdbc.url}" />
        <property name="username" value="${countNew.jdbc.user}" />
        <property name="password" value="${countNew.jdbc.pwd}" />
        <property name="validationQuery" value="SELECT 1" />
        <property name="testOnBorrow" value="true"/>
    </bean>

    (4)

    如果是在Spring中使用c3p0连接池,则在定义datasource的时候,添加属性testConnectionOnCheckin和testConnectionOnCheckout,如:

    <bean name="cacheCloudDB" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${cache.url}"/>
    <property name="user" value="${cache.user}"/>
    <property name="password" value="${cache.password}"/>
    <property name="initialPoolSize" value="10"/>
    <property name="maxPoolSize" value="${cache.maxPoolSize}"/>
    <property name="testConnectionOnCheckin" value="false"/>
    <property name="testConnectionOnCheckout" value="true"/>
    <property name="preferredTestQuery" value="SELECT 1"/>
    </bean>

    2.jndi数据源配置

    (1) 什么是jndi

    http://blog.csdn.net/liujiahan629629/article/details/20568475

    http://www.cnblogs.com/ITtangtang/archive/2012/05/21/2511749.html

    http://blog.csdn.net/jiangguilong2000/article/details/12523771

    http://blog.csdn.net/beijixingtianyake/article/details/49927761

  • 相关阅读:
    web前端的面试真题
    web前端面试真题! 面试的经历和回答只做参考1
    web前端面试真题! 面试的经历和回答只做参考
    html面试资料
    angluar.js的核心介绍
    解决 Chrome支持小于12px 的文字
    div居中效果出现的问题和解决方法
    li和li之间的bug解决方法
    前端面试题笔试考题和答案
    html5新增的标签和使用的方法
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5714557.html
Copyright © 2011-2022 走看看