我正在对我们的数据库执行压力测试,该数据库在 MySQL 上处于休眠状态。我正在使用具有默认配置的 c3p0 连接池,但 maxpoolsize 为 15。
interface EntityRepository extends JpaRepository<Entity, UUID> {}
@Service
public class EntityService {
@Autowired
EntityRepository er;
@Transactional(propagation = Propagation.REQUIRED)
public Entity addEntity(Entity r) {
er.save(r);
}
}
public class StressTest {
@Autowired
EntityService rs;
@Test
public void entityStressTest() {
for(int i = 0; i < 100; i++) {
Thread t = new Thread(new Runnable() {
public void run() {
rs.addEntity(new Entity());
}
}
t.start();
}
}
}
每次运行此测试时,我都会创建 5-8 个实体,然后我会收到以下三个日志消息之一:
[错误] 14:39:23,127 [Thread-20] SqlExceptionHelper - SQLException 由以下故障引发:com.mchange.v2.resourcepool.ResourcePoolException:尝试使用关闭或损坏的资源池
[信息] 14:48:45,478 [Thread-11] JdbcTransaction - HHH000425:无法关闭会话;吞咽异常[org.hibernate.service.UnknownServiceException:请求未知服务[org.hibernate.stat.spi.StatisticsImplementor]]作为事务完成
[ INFO] 14:49:22,860 [Thread-18] BasicResourcePool - com.mchange.v2.resourcepool.BasicResourcePool@16f7ca - 检出资源的尝试被中断,因为池现在已关闭。[线程:线程 18]
我很困惑可能是什么原因造成的