저는 스프링 부트 애플리케이션에서 연결 풀링을 위해 c3p0을 몇 달 동안 사용해 왔습니다. 특히 아침에 연결 문제가 발생하기 시작한 약 2 주 전까지는 문제가 없었습니다. 매일 아침 내 응용 프로그램에 로그인하려고하면 Could not open connection
오류가 발생합니다. 그런 다음 문제를 제거하기 위해 응용 프로그램을 다시 시작합니다. 문제의 근본 원인을 파악할 수 없습니다. 나는에-케이스 (미 반환 연결을 추려 내 응용 프로그램에 C3P0 디버그 구성을 추가 한c3p0을 사용함에도 불구하고`Could not open connection` 문제가 발생했습니다.
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception ex) {
throw new ExceptionInInitializerError(ex);
}
}
public Session openSession() {
return sessionFactory.openSession();
}
}
:
hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb?autoReconnect=true</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">abc123</property>
<property name="hibernate.dialect">config.CustomDialect</property>
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.initialPoolSize">5</property>
<property name="hibernate.c3p0.minPoolSize">5</property>
<property name="hibernate.c3p0.maxPoolSize">100</property>
<property name="hibernate.c3p0.checkoutTimeout">3000</property>
<property name="hibernate.c3p0.maxStatementsPerConnection">30</property>
<property name="hibernate.c3p0.unreturnedConnectionTimeout">3000</property>
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
...
POJO mappings
</session-factory>
</hibernate-configuration>
가 여기 내 HibernateUtil과 클래스의 : 여기
내 hibernate.cfg.xml로의 메모리 누수) 및 스택 추적을 생성하지만 아무것도 로그에 표시되지 않습니다.다음은이 아침부터 로그의 일부입니다 :
여기 사람이 문제가 자리하고있는 곳 나를내는 데 도움이 수 있습니까?
편집 : CustomDialect
클래스 : 당신이 데이터베이스 연결의 부족 때문에
public class CustomDialect extends MySQL5InnoDBDialect {
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
Ebraheem, 연결 유출을 알아 내기 위해'unreturnedConnectionTimeout'과'debugUnreturnedConnectionStackTraces' 설정을했습니다. 지금까지 아무 것도 로그에 표시되지 않습니다. 또한 SonarQube를 사용하여 소스 코드를 스캔 했으므로 리소스 유출도 감지되지 않습니다. 내가 놀랍게 생각하는 것은 c3p0과'unreturnedConnectionTimeout'과'debugUnreturnedConnectionStackTraces' 설정을 사용하고 있음에도 불구하고 46,956,212 ms 또는 ~ 13hr까지의 연결 비활성이 발생한다는 것입니다. –
'checkoutTimeout'을 줄이려고 했습니까? –
또한 서버로부터 성공적으로받은 마지막 패킷은 약 13 시간 전에 있었는데, 나는 앱이 언제 시작될지를 묻고 싶다 –