HikariCP未保存到数据库

时间:2016-08-04 10:20:41

标签: grails jdbc hikaricp

我试图为Hikari的Grails 2.5.4应用程序切换池,发现与默认的Tomcat jdbc相比,它的性能提升了很大!

然而,在运行某些集成测试时,我偶然发现了一个问题。这是现在失败的测试方法:

​def 'Returns the bar with the least foo'() {   given:
      def foobar = Foobar.build()
   and:
      def bar1 = Bar.build(foo: 25, foobar: foobar)
      def item1 = BarItem.build(state: AVAILABLE)
           item1.addToBars(bar1)
   and:
      def bar2 =  Bar.build(foo: 12, foobar: foobar)
      def item2 = BarItem.build(state: AVAILABLE)
           item2.addToBars(bar2)

   when:
      def bestBar = foobar.getBestBar()
   then:
      bestBar.id == bar2.id

   when:
      item2.state = State.BLACKED_OUT
      item2.save(flush: true)
      def refreshedFoobar
      Foobar.withNewSession {
         refreshedFoobar = Foobar.get(foobar.id) //This is returning null
      }
   and:
      bestBar = refreshedFoobar.getBestBar() //null pointer exception here
   then:
      bestBar.id == bar1.id
}

为什么会这样?似乎事情没有被正确地推入数据库,就像它只是把它们放在会话中等待稍后发送它们一样。

这是我的Hikari配置:

def hp = new Properties()
        hp.username = ds.username
        hp.password = ds.password
        hp.connectionTimeout = ds.maxWait
        hp.maximumPoolSize = ds.maxActive
        hp.minimumIdle = ds.minIdle
        hp.jdbcUrl = ds.url
        hp.driverClassName = ds.driverClassName

        HikariConfig hc = new HikariConfig(hp)
        hc.with{
            addDataSourceProperty("prepStmtCacheSize", 500)
            addDataSourceProperty("prepStmtCacheSqlLimit", 2048)
            addDataSourceProperty("cachePrepStmts", true)
            addDataSourceProperty("useServerPrepStmts", true)
        }

值为

dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    driverClassName = 'com.mysql.jdbc.Driver'
    username = 'user'
    password = 'pass'
    maxActive = 250
    minIdle = 5
    maxWait = 10000

日志:

2016-08-04 17:49:28,070 [main] DEBUG hikari.HikariConfig  - HikariPool-1 - configuration:
2016-08-04 17:49:28,071 [main] DEBUG hikari.HikariConfig  - allowPoolSuspension.............false
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - autoCommit......................true
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - catalog.........................null
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - connectionInitSql...............null
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - connectionTestQuery.............null
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - connectionTimeout...............10000
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - dataSource......................null
2016-08-04 17:49:28,072 [main] DEBUG hikari.HikariConfig  - dataSourceClassName.............null
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - dataSourceJNDI..................null
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - dataSourceProperties............{password=<masked>}
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - driverClassName................."com.mysql.jdbc.Driver"
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - healthCheckProperties...........{}
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - healthCheckRegistry.............null
2016-08-04 17:49:28,073 [main] DEBUG hikari.HikariConfig  - idleTimeout.....................600000
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - initializationFailFast..........true
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - isolateInternalQueries..........false
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - jdbc4ConnectionTest.............false
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - jdbcUrl........................."jdbc:mysql://localhost:3306/foo_test?autoReconnect=true"
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - leakDetectionThreshold..........0
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - maxLifetime.....................1800000
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - maximumPoolSize.................250
2016-08-04 17:49:28,074 [main] DEBUG hikari.HikariConfig  - metricRegistry..................null
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - metricsTrackerFactory...........null
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - minimumIdle.....................250
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - password........................<masked>
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - poolName........................"HikariPool-1"
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - readOnly........................false
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - registerMbeans..................false
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - scheduledExecutorService........null
2016-08-04 17:49:28,075 [main] DEBUG hikari.HikariConfig  - threadFactory...................null
2016-08-04 17:49:28,076 [main] DEBUG hikari.HikariConfig  - transactionIsolation............null
2016-08-04 17:49:28,076 [main] DEBUG hikari.HikariConfig  - username........................"root"
2016-08-04 17:49:28,076 [main] DEBUG hikari.HikariConfig  - validationTimeout...............5000
2016-08-04 17:49:28,077 [main] INFO  hikari.HikariDataSource  - HikariPool-1 - Started.
2016-08-04 17:49:28,287 [main] INFO  pool.PoolBase  - HikariPool-1 - Driver does not support get/set network timeout for connections. (com.mysql.jdbc.JDBC4Connection.getNetworkTimeout()I)
2016-08-04 17:49:28,312 [HikariPool-1 housekeeper] DEBUG pool.HikariPool  - HikariPool-1 - Pool stats (total=0, active=0, idle=0, waiting=0)
2016-08-04 17:49:28,381 [HikariPool-1 connection adder] DEBUG pool.HikariPool  - HikariPool-1 - Added connection com.mysql.jdbc.JDBC4Connection@2929ca0e
....

然后我得到了很多这些:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

但我认为这只是因为我的本地mysql设置,因为我在设置中使用生产池大小

0 个答案:

没有答案
相关问题