> 데이터 베이스 > MySQL 튜토리얼 > \'com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 연결이 닫힌 후 작업이 허용되지 않음\' 문제를 해결하는 방법은 무엇입니까?

\'com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 연결이 닫힌 후 작업이 허용되지 않음\' 문제를 해결하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-25 17:10:02
원래의
866명이 탐색했습니다.

How to Troubleshoot

"com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 연결이 닫힌 후에는 작업이 허용되지 않습니다."

문제:
원격 서버에 애플리케이션을 배포할 때 애플리케이션을 하루 이상 실행한 후 MySQL 연결 예외가 발생합니다. 연결이 닫힌 후에는 어떤 작업도 허용되지 않는다는 예외 메시지가 나타납니다.

원인:
예외는 비활성으로 인해 연결이 끊어졌을 가능성이 높습니다. MySQL 서버 및 클라이언트의 기본 시간 초과 설정이 너무 짧아 연결이 조기에 종료될 수 있습니다.

해결책:

1. 서버 및 클라이언트 시간 초과 조정

  • 서버(MySQL 구성):

    • MySQL에서 "wait_timeout" 값을 늘립니다. 데이터베이스 구성 파일(my.cnf 또는 my.ini) 이 설정은 연결이 닫히기 전에 비활성 상태로 유지될 수 있는 최대 시간을 결정합니다.
  • 클라이언트(Hibernate/JDBC 연결 풀):

    • Hibernate 구성 파일의 "timeout" 속성을 더 높은 값(예: 권장 600초(10분))으로 설정합니다. 이렇게 하면 Hibernate가 연결을 너무 빨리 닫지 않게 됩니다.

2. 연결 풀링 활성화

  • C3P0 또는 DBCP와 같은 연결 풀을 사용하여 데이터베이스 연결을 효율적으로 관리하세요. 연결 풀은 사전 설정된 연결 풀을 생성하고 유지하여 매번 연결을 열고 닫는 오버헤드를 줄입니다.
  • 연결 풀을 구성하여 사용하기 전에 자동으로 연결을 확인하고 검증하세요. 이렇게 하면 끊어진 연결이 감지되고 삭제되어 예외가 방지됩니다.

추가 조치:

  • "autoReconnect" 속성을 설정하세요. JDBC 연결 풀 구성에서 true로 설정합니다. 이를 통해 연결이 실패할 때 풀이 자동으로 연결을 다시 설정할 수 있습니다.
  • "testConnectionOnCheckout" 속성을 사용하여 연결을 사용하기 전에 테스트하세요. 이렇게 하면 오래된 연결이 감지되어 풀에서 제거됩니다.
  • 애플리케이션 로그를 정기적으로 모니터링하여 잠재적인 연결 문제를 조기에 감지하세요.

업데이트된 Hibernate 구성:

제공된 업데이트된 Hibernate 구성 파일은 C3P0 연결 풀링을 사용하고 권장 설정을 포함합니다:

<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>

    <!-- Enable C3P0 connection pooling -->
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="c3p0.max_size">20</property>
    <property name="c3p0.min_size">5</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.timeout">600</property>
    <property name="c3p0.idleConnectionTestPeriod">3600</property>
    <property name="c3p0.testConnectionOnCheckout">true</property>
  </session-factory>
</hibernate-configuration>
로그인 후 복사

위 내용은 \'com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 연결이 닫힌 후 작업이 허용되지 않음\' 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿