source

MySql과의 연결이 자동으로 중단됩니다.커넥터/J를 올바르게 설정하는 방법

manysource 2023. 1. 17. 21:21

MySql과의 연결이 자동으로 중단됩니다.커넥터/J를 올바르게 설정하는 방법

오류 메시지에서 다음 조언을 읽습니다.

이 문제를 방지하려면 응용 프로그램에서 사용하기 전에 연결 유효 기간 만료 및/또는 테스트, 클라이언트 타임아웃에 대한 서버 구성 값 증가 또는 Connector/J 연결 속성 'autoReconnect=true' 사용을 고려해야 합니다.

봄 JPA ★★★★★★★★★★★★★★★★★★★★★★★★★★★」J」에서는?)persistence.xml 의 경우, 「」entityManagerFactory 설정, 「」의 설정.dateSource★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

이 텍스트에서는 접속 중단을 방지하기 위한 다음 3가지 솔루션에 대해 설명합니다.

  1. 은 접속 문자열로 합니다.autoReconnect=true드라이버 레벨에서 동작하는 URL 접속 문자열의 속성입니다.데이터 원본 구성에서 연결 문자열을 변경해야 합니다.

    url="jdbc:mysql://localhost:3306/confluence?autoReconnect=true"
    
  2. 타임아웃을 늘립니다.이것은 일반적으로 데이터베이스의 속성입니다.이 값을 크게 하면, 접속의 중단이 적은지를 확인할 수 있습니다.

  3. 연결 검증을 테스트하도록 연결 풀을 구성합니다.이 작업은 드라이버 레벨이 아닌 풀장에서 수행됩니다.이는 사용하는 데이터 원본 구현에 따라 달라집니다.그러나 c3p0과 같이 풀링된 데이터 소스를 사용하는 경우 데이터 소스의 속성으로 구성할 수 있어야 합니다.

기타 코멘트:

  • 또한 데이터 소스/풀에는 타임아웃이 있을 수 있습니다.타임아웃은 아이돌 접속이 풀에 남아 있는 시간에 해당합니다.db 타임아웃과 혼동하지 않기 위해서.
  • 접속의 유효성을 테스트하는 방법은 여러 가지가 있습니다.일반적인 방법 중 하나는 더미 테스트 테이블을 갖는 것입니다.더미 테스트테이블에 대해 연결이 아직 정상인지 확인하기 위해 풀이 선택을 발행합니다.

AutoReconnect는 권장되지 않습니다.여기 MySQL에서

드라이버는 오래된 연결 및/또는 비활성 연결을 재정립해야 합니까?활성화되어 있는 경우 드라이버는 현재 트랜잭션에 속하는 오래된 연결 또는 비활성 연결에서 실행된 쿼리에 대한 예외를 발생시키지만 새 트랜잭션에서 연결에 대해 실행된 다음 쿼리가 발생하기 전에 다시 연결을 시도합니다.이 기능은 응용 프로그램이 SQLException을 제대로 처리하지 못할 때 세션 상태 및 데이터 일관성과 관련된 부작용이 있으며 비활성 연결 및 오래된 연결로 인한 SQLException을 적절하게 처리하도록 응용 프로그램을 구성할 수 없는 경우에만 사용하도록 설계되었기 때문에 사용하지 않는 것이 좋습니다.또는 마지막 옵션으로 MySQL 서버 변수 "wait_timeout"을 기본값인 8시간이 아닌 높은 값으로 설정하는 방법을 검토하십시오.

여러 가지 해결 방법을 통해 문제가 해결되었지만, 잠시 후 연결이 타임아웃되거나 연결이 끊깁니다.2-3일 후에 나는 나의 문제를 해결할 수 있는 해결책을 얻었다.

많은 솔루션에서 autoReconnect=true를 사용할 것을 제안하지만 문서를 살펴보니autoReconnect 파라미터를 설명하는 다음 텍스트를 소스에서 확인했습니다.

이 기능은 세션 상태 및 데이터 일관성과 관련된 부작용이 있으므로 사용하지 않는 것이 좋습니다.

휴지 상태 코드를 찾아봤을 때요휴지 상태의 기본 연결 메커니즘은 재접속을 지원하지 않으므로 H3C0 연결 풀을 사용해야 합니다(그 자체가 재접속을 항상 지원하는 것은 아닙니다).

단, H3C0을 사용한 후 기본 동작은 요청을 처리하는 것으로 보입니다.접속이 정지되어 있는 경우 사용자에게 표시되며 오류가 발생합니다.그러나 적어도 다음 요청을 위해 재접속합니다.한 가지 실수가 무한 오차보다 낫다고 생각하지만, 그래도 0 오차만큼은 아닙니다.요청 전에 연결을 테스트하면 성능이 저하될 수 있으므로 설명서에서 권장하지 않는 옵션 test Connection On Checkout이 필요합니다.물론 소프트웨어가 먼저 작동해야 하고, 두 번째로 빠르게 작동해야 합니다.

즉, "work"(오류 없이 재접속함으로써 드롭된 접속을 처리하는 것을 포함한다)에의 접속을 취득하려면 , 다음의 순서를 실행합니다.hibernate.cfg.xml의 경우:

  <!-- hibernate.cfg.xml -->
    <property name="c3p0.min_size">5</property>
    <property name="c3p0.max_size">20</property>
    <property name="c3p0.timeout">1800</property>
    <property name="c3p0.max_statements">50</property>
    <!-- no "connection.pool_size" entry! -->

그런 다음 c3p0.properties 파일을 만듭니다.이 파일은 클래스 패스의 루트에 있어야 합니다(즉, 애플리케이션의 특정 부분에 대해서는 덮어쓸 수 없습니다).

c3p0.properties

c3p0.testConnectionOnCheckout=true

이 솔루션이 기능하지 않는 경우는, 보다 많은 솔루션을 사용할 수 있습니다.

1. Add

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

 Also dont forget to place the c3p0-0.9.1.jar in the classpath. 



    2. Instead of using that c3p0.properties file, couldn't you just use this property in your hibernate.cfg.xml:

<property name="hibernate.c3p0.validate">true</property>

    Also checkout the last post on this page:

    https://forum.hibernate.org/viewtopic.php?p=2399313

    If all these not work than go [more][1] and read in detail


  [1]: http://hibernatedb.blogspot.in/2009/05/automatic-reconnect-from-hibernate-to.html

이것은 검색 엔진을 통해 이 오래된 게시물을 찾는 저 같은 사람들을 위한 것입니다.

다른 답은 더 나은 장기적 해결책입니다.하지만 만약 당신이 단지mysql접속이 즉시 재실행됩니다.shutdown그리고나서restart tomcat당분간 모든 게 잘 될 거야이를 통해 장기적인 솔루션을 모색하면서 시스템 다운타임을 방지할 수 있습니다.

로 이동합니다.$CATALINA_HOME에서terminal, 라고 입력합니다.shutdown.sh, 라고 입력합니다.startup.sh 동안 작동합니다. 시작 시퀀스가 완료될 때까지 잠시 기다리면 잠시 동안 앱이 다시 작동합니다.

언급URL : https://stackoverflow.com/questions/2077081/connection-with-mysql-is-being-aborted-automatically-how-to-configure-connector