在配置checkoutTimeout时如何解决hibernate c3p0抛出StaleStateException?

时间:2017-04-02 06:49:27

标签: hibernate c3p0

我的hibernate配置是:

.... <hibernate config of username,password etc> ...
hibernate.c3p0.min_size           = 75;
hibernate.c3p0.max_size           = 100;
hibernate.c3p0.timeout            = 3600;
hibernate.c3p0.idle_test_period   = 300;
hibernate.c3p0.acquireRetryAttempts = 5;
hibernate.c3p0.acquireRetryDelay  = 10;
hibernate.c3p0.checkoutTimeout    = 50;

我最近添加了最后三个配置(acquireRetryAttempts,acquireRetryDelay,checkoutTimeout)。

没有这些配置,我没有看到任何问题。

但是,使用这些配置,我只能看到写入数据库的操作的StaleStateException(对于任何其他数据库操作都没有例外)。

我想要checkoutTimeout,以便在连接池没有空闲连接时跟踪所有实例。没有checkoutTimeout我的应用程序将无限期地等待连接 - 即使池没有空闲连接。我想特别避免这种情况。

我通过测量getEntityManager()执行所需的时间,将checkoutTimeout设置为50ms。 p99.99小于10ms。 p100低于1250米;然而,这些是罕见的异常值(可能是12个数据点)。请求量平均为3000tps。

我注意到将超时值设置为更高,在500毫秒或1000毫秒时不会导致StaleStateException。我不明白为什么。

0 个答案:

没有答案