좋은 작은 Spring Boot JPA 웹 애플리케이션이 있습니다. Amazon Beanstalk에 배포되며 데이터 유지를 위해 Amazon RDS를 사용합니다. 그러나 자주 사용되지 않으므로 이러한 종류의 예외로 잠시 후 실패합니다.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : 서버에서 성공적으로 수신 한 마지막 패킷은 79,870,633 밀리 초 전입니다.
서버로 성공적으로 전송 된 마지막 패킷은 79,870,634 밀리 초 전이었습니다. 서버 구성 값 ‘wait_timeout’보다 깁니다. 이 문제를 방지하려면 응용 프로그램에서 사용하기 전에 연결 유효성 만료 및 / 또는 테스트, 클라이언트 시간 초과에 대한 서버 구성 값 늘리기 또는 커넥터 / J 연결 속성 ‘autoReconnect = true’사용을 고려해야합니다.
이 설정을 구성하는 방법을 잘 모르겠고 http://spring.io (아주 좋은 사이트) 에서 정보를 찾을 수 없습니다 . 정보에 대한 아이디어 나 지침은 무엇입니까?
답변
나는 부팅이 DataSource
당신을 위해 구성한다고 가정 합니다. 이 경우 MySQL을 사용하고 있으므로 application.properties
최대 1.3에 다음을 추가 할 수 있습니다.
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
djxak이 주석에 언급 한 바와 같이, 네 개의 연결 풀 봄 부트 지원을위한 1.4을 정의의 특정 네임 스페이스는 : tomcat
, hikari
, dbcp
, dbcp2
( dbcp
1.5으로 사용되지 않습니다). 사용중인 연결 풀을 확인하고 해당 기능이 지원되는지 확인해야합니다. 위의 예는 바람둥이 용이므로 1.4+에서 다음과 같이 작성해야합니다.
spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
의 사용이 있습니다 autoReconnect
됩니다 하지 않는 것이 좋습니다 :
이 기능의 사용은 응용 프로그램이 SQLException을 제대로 처리하지 않을 때 세션 상태 및 데이터 일관성과 관련된 부작용이 있고 다음으로 인해 발생하는 SQLException을 처리하도록 응용 프로그램을 구성 할 수없는 경우에만 사용하도록 설계 되었기 때문에 권장되지 않습니다. 제대로 작동하지 않고 부실한 연결.
답변
위의 제안은 저에게 효과적이지 않았습니다. 실제로 효과가 있었던 것은 application.properties에 다음 줄을 포함하는 것입니다.
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 3600000
spring.datasource.validationQuery = SELECT 1
여기 에서 설명을 찾을 수 있습니다.
답변
spring.datasource.tomcat.testOnBorrow=true
application.properties의 설정 이 작동하지 않았습니다.
아래와 같이 프로그래밍 방식으로 설정하면 문제없이 작동했습니다.
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
@Bean
public DataSource dataSource() {
PoolProperties poolProperties = new PoolProperties();
poolProperties.setUrl(this.properties.getDatabase().getUrl());
poolProperties.setUsername(this.properties.getDatabase().getUsername());
poolProperties.setPassword(this.properties.getDatabase().getPassword());
//here it is
poolProperties.setTestOnBorrow(true);
poolProperties.setValidationQuery("SELECT 1");
return new DataSource(poolProperties);
}
답변
방금 Spring Boot 1.4로 이동했으며 이러한 속성의 이름이 변경되었음을 알았습니다.
spring.datasource.dbcp.test-while-idle=true
spring.datasource.dbcp.time-between-eviction-runs-millis=3600000
spring.datasource.dbcp.validation-query=SELECT 1
답변
whoami의 대답 이 정답 입니다. 제안 된 속성을 사용하여이 작업을 수행 할 수 없습니다 (Spring Boot 1.5.3.RELEASE 사용).
완전한 구성 클래스이기 때문에 내 대답을 추가하고 있으므로 Spring Boot를 사용하는 사람을 도울 수 있습니다.
@Configuration
@Log4j
public class SwatDataBaseConfig {
@Value("${swat.decrypt.location}")
private String fileLocation;
@Value("${swat.datasource.url}")
private String dbURL;
@Value("${swat.datasource.driver-class-name}")
private String driverName;
@Value("${swat.datasource.username}")
private String userName;
@Value("${swat.datasource.password}")
private String hashedPassword;
@Bean
public DataSource primaryDataSource() {
PoolProperties poolProperties = new PoolProperties();
poolProperties.setUrl(dbURL);
poolProperties.setUsername(userName);
poolProperties.setPassword(password);
poolProperties.setDriverClassName(driverName);
poolProperties.setTestOnBorrow(true);
poolProperties.setValidationQuery("SELECT 1");
poolProperties.setValidationInterval(0);
DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
return ds;
}
}
답변
비슷한 문제가 있습니다. Spring 4 및 Tomcat 8. Spring 구성으로 문제를 해결합니다.
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="initialSize" value="10" />
<property name="maxActive" value="25" />
<property name="maxIdle" value="20" />
<property name="minIdle" value="10" />
...
<property name="testOnBorrow" value="true" />
<property name="validationQuery" value="SELECT 1" />
</bean>
나는 테스트했다. 잘 작동한다! 이 두 줄은 데이터베이스에 다시 연결하기 위해 모든 작업을 수행합니다.
<property name="testOnBorrow" value="true" />
<property name="validationQuery" value="SELECT 1" />
답변
누구나 사용자 정의 DataSource를 사용하는 경우
@Bean(name = "managementDataSource")
@ConfigurationProperties(prefix = "management.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
속성은 다음과 같아야합니다. 접두사가있는 @ConfigurationProperties를 확인합니다. 접두사는 실제 속성 이름 앞의 모든 것입니다.
management.datasource.test-on-borrow=true
management.datasource.validation-query=SELECT 1
Spring Version 1.4.4.RELEASE에 대한 참조