spring-boot jpa 하이버네이션에서 4<24를 초과하면 DB로의 접속이 끊어진다.
mysql에 spring-boot, jpa-hiberanate를 사용하는 앱이 있습니다.이 에러 로그가 표시됩니다.
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 56,006,037 milliseconds ago. The last packet sent successfully to the server was 56,006,037 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.
여기 제 application.properties가 있습니다.
# DataSource settings: set here configurations for the database connection
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = test
spring.datasource.password = test
spring.datasource.driverClassName = com.mysql.jdbc.Driver
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate settings are prefixed with spring.jpa.hibernate.*
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
이 문제를 해결하려면
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
하지만 나는 그것이 추천되지 않는 것을 확인했어요.이 오류를 극복하려면 어떻게 해야 하는지 제안해 주실 수 있나요?
가장 쉬운 방법은,autoReconnect
JDBC URL의 속성. 단, 권장되는 접근법은 아닙니다.
spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true
이로 인해 접속이 활성화되어 있고 트랜잭션 중에 문제가 발생하여 재접속이 발생할 수 있습니다.트랜잭션 시작 시 연결이 검증되고 시작 시 새 연결이 획득되는 경우 문제가 발생하지 않습니다.
다만, 애플리케이션의 라이프 타임중에 접속의 검증을 유효하게 하는 것이 좋을 가능성이 있습니다.이를 위해 몇 가지 속성을 지정할 수 있습니다.
먼저 풀에 허용되는 최대 연결 수를 지정합니다(최대 풀 크기 결정에 대한 내용은 다음을 참조하십시오).
spring.datasource.max-active=10
초기 연결 수를 지정할 수도 있습니다.
spring.datasource.initial-size=5
다음으로 아이돌 접속의 최소수와 최대수를 지정합니다.
spring.datasource.max-idle=5
spring.datasource.min-idle=1
연결을 검증하려면 검증 쿼리 및 검증 시기를 지정해야 합니다.풀에서 접속을 취득하는 것이 아니라 정기적으로 검증하는 것이 바람직합니다(수영장에서 접속을 끊는 것을 방지하기 위해서).
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
주의: 의 사용방법validation-query
JDBC4의 접속 검증 방법이 더 좋거나 다르기 때문에 실제로는 권장되지 않습니다.HikariCP는 이용 가능한 경우 자동으로 JDBC 검증 메서드를 호출합니다.
이제 연결이 유휴 상태인 동안 검증도 수행하므로 연결에 대해 이 쿼리를 실행할 빈도와 연결이 유휴 상태로 간주될 시기를 지정해야 합니다.
spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)
이렇게 하면 (아이돌) 접속 검증이 트리거되며 예외가 발생하거나 아이돌 기간이 경과하면 접속이 풀에서 삭제됩니다.
접속 풀로서 Tomcat JDBC 를 사용하고 있다고 가정하면, 무엇을 어떻게 설정할지를 알 수 있습니다.
업데이트: Spring Boot 2.x는 기본 연결 풀을 Tomcat JDBC가 아닌 HikariCP로 전환했습니다.
언급URL : https://stackoverflow.com/questions/30451470/connection-to-db-dies-after-424-in-spring-boot-jpa-hibernate
'programing' 카테고리의 다른 글
어레이 리스트에서 어레이로 (0) | 2023.01.20 |
---|---|
웹 사이트 스크린샷 (0) | 2023.01.20 |
"new Object()"와 객체 리터럴 표기법의 차이점은 무엇입니까? (0) | 2023.01.20 |
& & 로직 및 | 로직테이블의 True와 False (0) | 2023.01.20 |
휴지 상태: "필드 'id'에 기본값이 없습니다." (0) | 2023.01.20 |