MySQL で休止状態になっているデータベースでストレス テストを実行しています。maxpoolsize が 15 であることを除いて、デフォルト設定で c3p0 接続プールを使用しています。
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 個のエンティティを作成し、次の 3 つのログ メッセージのいずれかを受け取ります。
[エラー] 14:39:23,127 [Thread-20] SqlExceptionHelper - SQLException は、次の障害によって引き起こされました: com.mchange.v2.resourcepool.ResourcePoolException: 閉じられた、または破損したリソース プールを使用しようとしました
[情報] 14:48:45,478 [スレッド 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]
私はこれを引き起こしている可能性があることに困惑しています