Scala:在大量并发线程/期货中使用EntityManager

时间:2017-03-22 15:27:31

标签: java scala hibernate jpa

我是Hibernate / JPA的新手,我正在开发一个应用程序,我收到来自Message Broker的请求(100-200个请求/秒)&并在期货/线程中处理它,我正在为每个线程创建一个新的EntityManager。最初,当JPA开始抛出有关“太多SQL连接”的错误时,我将hikariCP包含在连接池中,之后我只能处理等于池大小的请求数。以下是我的数据库代码

def withTransaction(callback: (EntityManager) => Any) = {
    val entityManager = entityFactory.createEntityManager()
    try {
      entityManager.getTransaction.begin()
      callback(entityManager)
      entityManager.getTransaction.commit()
    } finally {
      entityManager.close()
    }
  }

我的hikari配置如下

<property name="hibernate.connection.provider_class" value="com.zaxxer.hikari.hibernate.HikariConnectionProvider" />
<property name="hibernate.hikari.minimumIdle" value="30" />
<property name="hibernate.hikari.maximumPoolSize" value="5" />
<property name="hibernate.hikari.idleTimeout" value="30000" />
<property name="hibernate.hikari.connectionTimeout" value="300000000" />
<property name="hibernate.hikari.dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
<property name="hibernate.hikari.dataSource.url" value="jdbc:mysql://--" />
<property name="hibernate.hikari.dataSource.user" value="--" />
<property name="hibernate.hikari.dataSource.password" value="--" />

0 个答案:

没有答案