[SPRING] Spring, hibernate 및 C3P0 설정으로 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException을 재현하십시오.
SPRINGSpring, 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&characterEncoding=UTF-8&"
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.MySQL과 연결 풀에도 비슷한 문제가있었습니다. 문제는 연결 풀에 유휴 시간 초과가 30 분이지만 데이터베이스가 10 초 후에 연결을 끊는 것입니다. 유휴 연결 확인주기는 120 초이므로 풀이 깨진 연결을 사용하는 데 110 초보다 약간 남습니다!
MySQL과 연결 풀에도 비슷한 문제가있었습니다. 문제는 연결 풀에 유휴 시간 초과가 30 분이지만 데이터베이스가 10 초 후에 연결을 끊는 것입니다. 유휴 연결 확인주기는 120 초이므로 풀이 깨진 연결을 사용하는 데 110 초보다 약간 남습니다!
제작을 위해 다음 설정을 사용합니다.
MySQL: wait_timeout=75 C3P0: maxIdleTime=60 idleConnectionTestPeriod=55
-
==============================
2.오류를 재현하려면 MySQL 등록 정보의 연결 시간 초과를 매우 낮은 값 (예 : 2ms)으로 설정하고 처리 시간이 오래 걸리는 것으로 알려진 쿼리를 실행하십시오. JDBC 연결을 설정하기 위해 특성 파일을 사용하는 경우 MySQL 연결 문자열 또는 특성을 통해 시간 초과 등록 정보를 설정할 수 있습니다. 특정 jaxax.sql.DataSource 연결과 MySQL 문서에서 Javadoc을 검색하는 방법에 대한 자세한 내용을 찾을 수 있습니다.
오류를 재현하려면 MySQL 등록 정보의 연결 시간 초과를 매우 낮은 값 (예 : 2ms)으로 설정하고 처리 시간이 오래 걸리는 것으로 알려진 쿼리를 실행하십시오. JDBC 연결을 설정하기 위해 특성 파일을 사용하는 경우 MySQL 연결 문자열 또는 특성을 통해 시간 초과 등록 정보를 설정할 수 있습니다. 특정 jaxax.sql.DataSource 연결과 MySQL 문서에서 Javadoc을 검색하는 방법에 대한 자세한 내용을 찾을 수 있습니다.
-
==============================
3.페이 - 몇 가지 중 하나 일 수 있습니다, 정말 지금까지 게시 된 정보를 기반으로 말할 수 없습니다.
페이 - 몇 가지 중 하나 일 수 있습니다, 정말 지금까지 게시 된 정보를 기반으로 말할 수 없습니다.
거기에 알려진 문제가있을 경우 MySQL / Spring / Hibernate / C3PO / JDBC 버전 번호를 질문에 추가하십시오.
생산 오류 메시지는 여러 가지 근본 원인이있는 공통된 오류 메시지입니다. 당신을위한 몇몇지도 :
from https://stackoverflow.com/questions/1511855/reproduce-com-mysql-jdbc-exceptions-jdbc4-communicationsexception-with-a-setup-o by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 부트 종속성에서 application.properties 상속 (0) | 2019.03.19 |
---|---|
[SPRING] java.lang.VerifyError : 클래스 net.sf.cglib.core.DebuggingClassWriter (0) | 2019.03.19 |
[SPRING] Spring map 요청 매개 변수를 POJO에 자동으로 매핑한다. (0) | 2019.03.19 |
[SPRING] Spring RestTemplate에서 응답을 어떻게 로그합니까? (0) | 2019.03.19 |
[SPRING] 스프링 MVC가있는 JSP 페이지의 스타일 시트 포함 (0) | 2019.03.19 |