복붙노트

[SPRING] Spring, hibernate 및 C3P0 설정으로 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException을 재현하십시오.

SPRING

Spring, hibernate 및 C3P0 설정으로 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException을 재현하십시오.

생산 코드에서이 오류가 발생했습니다.

이제 문제를 로컬에서 재현하고 수정하려고합니다. 다음과 같이 스프링 컨텍스트를 설정합니다.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" p:driverClass="com.mysql.jdbc.Driver"
    p:jdbcUrl="jdbc:mysql://localhost:3306/test?userUnicode=yes&amp;characterEncoding=UTF-8&amp"
    p:idleConnectionTestPeriod="120" p:initialPoolSize="1" p:maxIdleTime="1800"
    p:maxPoolSize="1" p:minPoolSize="1" p:checkoutTimeout="1000"

/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
        <value>
            hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
            hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
            hibernate.default_schema=platform_server_original
            hibernate.show_sql=false
        </value>
    </property>
    <property name="mappingResources">
        <list>
            <value>sometables.hbm.xml</value>
        </list>
    </property>
</bean>

그런 다음 mysql wait_timeout을 10 초로 설정 한 다음 기본적으로 연결을 열어 쿼리를 실행하고 닫은 다음 내 테스트를 실행하여 풀로 돌아온 다음 15 초 동안 스레드를 잠그고 다시 연결을 엽니 다. , 쿼리를 다시 수행하면 중단됩니다. 그러나, 나는 비슷한 오류가있어 :

그래서 나는이 두 가지 오류가 똑같은지 궁금하다. 나는 몇 가지 연구를했고 두 가지 오류가 같은 해결책으로 내려 갔다. "testConnectionOnCheckout = true"속성을 사용했다. 그러나 c3p0 doc에 따르면 이것은 매우 비싼 수표입니다. 그것은 "idleConnectionTestPeriod"의 사용을 권고하지만, 나는 이미 120 초로 설정하고있다. 유휴 연결을 제대로 확인할 수 있도록 어떤 값을 사용해야합니까?

그래서 기본적으로 두 가지를 묻습니다. 1. 프로덕션 코드에있는 오류를 어떻게 재현합니까? 2. 어떻게 고칠 수 있습니까?

감사!

해결법

  1. ==============================

    1.MySQL과 연결 풀에도 비슷한 문제가있었습니다. 문제는 연결 풀에 유휴 시간 초과가 30 분이지만 데이터베이스가 10 초 후에 연결을 끊는 것입니다. 유휴 연결 확인주기는 120 초이므로 풀이 깨진 연결을 사용하는 데 110 초보다 약간 남습니다!

    MySQL과 연결 풀에도 비슷한 문제가있었습니다. 문제는 연결 풀에 유휴 시간 초과가 30 분이지만 데이터베이스가 10 초 후에 연결을 끊는 것입니다. 유휴 연결 확인주기는 120 초이므로 풀이 깨진 연결을 사용하는 데 110 초보다 약간 남습니다!

    제작을 위해 다음 설정을 사용합니다.

    MySQL:
    wait_timeout=75
    C3P0:
    maxIdleTime=60
    idleConnectionTestPeriod=55
    
  2. ==============================

    2.오류를 재현하려면 MySQL 등록 정보의 연결 시간 초과를 매우 낮은 값 (예 : 2ms)으로 설정하고 처리 시간이 오래 걸리는 것으로 알려진 쿼리를 실행하십시오. JDBC 연결을 설정하기 위해 특성 파일을 사용하는 경우 MySQL 연결 문자열 또는 특성을 통해 시간 초과 등록 정보를 설정할 수 있습니다. 특정 jaxax.sql.DataSource 연결과 MySQL 문서에서 Javadoc을 검색하는 방법에 대한 자세한 내용을 찾을 수 있습니다.

    오류를 재현하려면 MySQL 등록 정보의 연결 시간 초과를 매우 낮은 값 (예 : 2ms)으로 설정하고 처리 시간이 오래 걸리는 것으로 알려진 쿼리를 실행하십시오. JDBC 연결을 설정하기 위해 특성 파일을 사용하는 경우 MySQL 연결 문자열 또는 특성을 통해 시간 초과 등록 정보를 설정할 수 있습니다. 특정 jaxax.sql.DataSource 연결과 MySQL 문서에서 Javadoc을 검색하는 방법에 대한 자세한 내용을 찾을 수 있습니다.

  3. ==============================

    3.페이 - 몇 가지 중 하나 일 수 있습니다, 정말 지금까지 게시 된 정보를 기반으로 말할 수 없습니다.

    페이 - 몇 가지 중 하나 일 수 있습니다, 정말 지금까지 게시 된 정보를 기반으로 말할 수 없습니다.

    거기에 알려진 문제가있을 경우 MySQL / Spring / Hibernate / C3PO / JDBC 버전 번호를 질문에 추가하십시오.

    생산 오류 메시지는 여러 가지 근본 원인이있는 공통된 오류 메시지입니다. 당신을위한 몇몇지도 :

  4. from https://stackoverflow.com/questions/1511855/reproduce-com-mysql-jdbc-exceptions-jdbc4-communicationsexception-with-a-setup-o by cc-by-sa and MIT license