我已经在我的Spring Boot Application中使用c3p0连接池几个月了。一直很好,直到大约两周前我开始遇到连接问题,特别是在早上。每天早上当我尝试登录我的应用程序时,都会抛出Could not open connection
错误。然后我会重新启动我的应用程序以解决问题。我无法找出问题的根本原因。
这是我的hibernate.cfg.xml:
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类:
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();
}
}
我已将c3p0调试配置添加到我的应用程序中以剔除未返回的连接(如果发生内存泄漏)并为其生成堆栈跟踪但日志中没有显示任何内容。
这是今天早上的一些日志:
这里的任何人都可以帮助我找出问题所在吗?
编辑:CustomDialect
上课:
public class CustomDialect extends MySQL5InnoDBDialect {
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
答案 0 :(得分:0)
出现此问题是因为您的数据库连接用完了。
Array.prototype.find()
的连接需求,这是自运行一天后出现问题以来的预期原因。 从C3P0登录调试尝试查看请求的连接数。
另外
理想情况下,您不得在生产中使用100
,因此您必须调试连接泄漏,并在不再有泄漏时删除
unreturnedConnectionTimeout
和unreturnedConnectionTimeout
配置。
修改强>
尝试这些配置:
debugUnreturnedConnectionStackTraces
因为有时Hibernate中的编码与MySQL db中的编码不同。