Java 为什么hibernate不放弃获取连接的尝试

Java 为什么hibernate不放弃获取连接的尝试,java,hibernate,c3p0,Java,Hibernate,C3p0,我的java代码我在一个挂起的ExecutorService上运行了一些任务,我在30分钟后中断了它们。他们都在试图获取数据库连接,我并不认为这是因为没有连接了,因为这是尝试将数据写入数据库的第一个任务。但不管怎样,我的问题是,为什么他们在30分钟前很久就放弃了获取连接的尝试,因为hibernate.c3p0.AcquisitioneryAttents被设置为10,而retrys之间的默认间隔仅为1秒 堆栈跟踪 休眠配置 如果在日志中没有看到异常,那么问题可能不是从数据库获取连接。可能是连接泄漏

我的java代码我在一个挂起的ExecutorService上运行了一些任务,我在30分钟后中断了它们。他们都在试图获取数据库连接,我并不认为这是因为没有连接了,因为这是尝试将数据写入数据库的第一个任务。但不管怎样,我的问题是,为什么他们在30分钟前很久就放弃了获取连接的尝试,因为hibernate.c3p0.AcquisitioneryAttents被设置为10,而retrys之间的默认间隔仅为1秒

堆栈跟踪

休眠配置


如果在日志中没有看到异常,那么问题可能不是从数据库获取连接。可能是连接泄漏。请尝试设置hibernate.c3p0.unreturnedConnectionTimeout和hibernate.c3p0.debugUnreturnedConnectionStackTraces。请看好的,我将设置这些选项,构建一个新版本,看看这是否能进一步说明问题。@SteveWaldman我认为问题在于我获得了一个hibernate会话的连接,然后做了各种事情,然后一些非db代码被卡住,所以连接永远不会被释放,所以我最终会耗尽连接。但问题不在于我的代码在连接完成时没有释放连接,而在于它没有完成所以不能释放连接。我是否可以使用hibernate.c3p0.unreturnedConnectionTimeout选项安全地释放该连接,即使线程被困在执行其他操作,或者判断调用unreturnedConnectionTimeout会强制关闭客户端签出的连接。它不温柔。如果应用程序的代码中存在阻止释放连接的问题,那么最好的办法是理解并解决该问题。但是,如果这是不可能的-例如,如果问题出在您无法修改的库代码中-那么,绝对可以使用unreturnedConnectionTimeout来解决这个问题。如果您决定最好使用unreturnedConnectionTimeout解决问题,1关闭DebuggenReturnedConnectionsTackTraces-这会造成性能损失,并且您已经了解了问题所在;2正确的超时是一门艺术。它应该足够长,使真正使用中的连接永远不会过期,但不要太长,使池在等待绞合连接过期时耗尽。
org.hibernate.exception.GenericJDBCException: Could not open connection
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:304)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1392)
at com.jthink.songlayer.hibernate.HibernateUtil.beginTransaction(HibernateUtil.java:145)
at com.jthink.songkong.analyse.acoustid.AcoustId.addToDatabase(AcoustId.java:1052)
at com.jthink.songkong.analyse.acoustid.AcoustId.getListOfRecordingTitlesForAcoustIds(AcoustId.java:1218)
at com.jthink.songkong.analyse.musicbrainz.scoring.MusicBrainzScorer.calculateReleaseScore2(MusicBrainzScorer.java:342)
at com.jthink.songkong.analyse.musicbrainz.scoring.MusicBrainzScorer.calculateReleaseScores(MusicBrainzScorer.java:524)
at com.jthink.songkong.analyse.musicbrainz.scoring.MusicBrainzScorer.calculateBestReleaseScore(MusicBrainzScorer.java:222)
at com.jthink.songkong.analyse.analyser.AbstractMusicBrainzGroupMatcher.scoreAndUpdateWithBestMatch(AbstractMusicBrainzGroupMatcher.java:144)
at com.jthink.songkong.analyse.analyser.AbstractMusicBrainzGroupMatcher.matchSongsToRelease(AbstractMusicBrainzGroupMatcher.java:122)
at com.jthink.songkong.analyse.analyser.AbstractMusicBrainzGroupMatcher.matchSongs(AbstractMusicBrainzGroupMatcher.java:69)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher.call(MusicBrainzSongGroupMatcher.java:236)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:69)
at com.jthink.songkong.analyse.analyser.MusicBrainzSongGroupMatcher1.call(MusicBrainzSongGroupMatcher1.java:12)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
 Configuration config = new Configuration();

        config.setProperty(Environment.DRIVER,"org.h2.Driver");
        config.setProperty(Environment.URL,"jdbc:h2:"+Db.DBFOLDER+"/"+Db.DBNAME+";FILE_LOCK=SOCKET;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=50000");
        config.setProperty(Environment.DIALECT,"org.hibernate.dialect.H2Dialect");
        config.setProperty("hibernate.connection.username","jaikoz");
        config.setProperty("hibernate.connection.password","jaikoz");
        config.setProperty("hibernate.c3p0.numHelperThreads","10");
        config.setProperty("hibernate.c3p0.min_size","20");
        config.setProperty("hibernate.c3p0.max_size","100");
        config.setProperty("hibernate.c3p0.timeout","300");
        config.setProperty("hibernate.c3p0.maxStatementsPerConnection","50");
        config.setProperty("hibernate.c3p0.idle_test_period","3000");
        config.setProperty("hibernate.c3p0.acquireRetryAttempts","10");