【问题标题】:spring, use HikariCP VS c3p0 ,same code, different resultspring,使用 HikariCP VS c3p0,相同的代码,不同的结果
【发布时间】:2020-04-24 03:08:45
【问题描述】:

环境

HikariCP version: HikariCP-java7 2.4.13
JDK version     : 1.7.0_080
Database        : PostgreSQL
Driver version  : 9.1-901.jdbc3

spring,使用 HikariCP VS c3p0,相同的代码,不同的结果

  @Transactional
   public Integer enableItem(Long id){

       //change item status from 0 to 1
       Integer result = itemDao.enableItem(id);

       //load item

       //if c3p0 , item status is new value 1
       // but Hikari, item status still is 0
       Item item = itemDao.findItemById(id);
       return result;
   }

在同一个事务中,先把item status从0改为1,然后读取最新的item信息,如果c3p0,item status是新值1,但是Hikari,item status还是0

Hikari 配置:

    <property name="driverClassName" value="#{meta['dataSource.driverClassName']}" />
    <property name="jdbcUrl" value="#{meta['dataSource.url']}" />
    <property name="username" value="#{meta['dataSource.username']}" />
    <property name="password" value="#{meta['dataSource.password']}" />
    <property name="readOnly" value="false" />

    <property name="idleTimeout" value="#{meta['dataSource.maxIdleTime']}" />
    <property name="connectionTimeout" value="30000" />
    <property name="maxLifetime" value="1800000" /> 
    <property name="maximumPoolSize" value="#{meta['dataSource.maxPoolSize']}" />

    <property name="minimumIdle" value="#{meta['dataSource.minPoolSize']}" />
</bean>

我希望通过 Hikari 获得最新的价值。配置有问题吗?

https://github.com/brettwooldridge/HikariCP/issues/1522

【问题讨论】:

    标签: spring c3p0 hikaricp


    【解决方案1】:

    这两个连接池的事务隔离级别可能有不同的默认值。

    尝试添加 &lt;property name="transactionIsolation" value="TRANSACTION_READ_COMMITTED"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多