HikariPool-1-使用线程时连接不可用

时间:2019-11-22 04:05:14

标签: java multithreading spring-boot

  

嗨,大家好,当我迭代列表并存储在   数据库使用线程,插入1,000后出现错误   记录

错误:

<nvd3 #lineChart [options]="options" [data]="data" *ngIf="isLoaderShow != true"></nvd3>

我的代码

 "Thread-2614" org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction;

    java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30080ms.

org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

2 个答案:

答案 0 :(得分:0)

创建无界线程是代码中的主要问题。

默认情况下,Hikari的池大小为10个连接。您可以使用以下方法增加它:

hikariDataSource.setMaximumPoolSize(...);

您正在创建一千多个线程并立即运行它们。这些数量比hikari池大小(无论您设置的是什么,还是上面的默认设置)大得多。因此,您的查询在队列中等待获取连接并最终超时。

您应该使用线程池。快速执行此操作的最简单方法是使用:

CompletableFuture.supplyAsync(() -> {/* contents of your run method here */});

这将使用ForkJoin公共池。您可以使用implementation中的ExecutorService对其进行微调。

答案 1 :(得分:0)

使用10个线程的ThreadPool并向其提交任务,如下所示

ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.submit(task1);

这将确保您的任务异步运行,并且不会发生连接耗尽