весна, используйте HikariCP VS c3p0, тот же код, другой результат - PullRequest
1 голос
/ 06 января 2020

Среда

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

пружина, использовать 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;
   }

В той же транзакции сначала измените статус элемента с 0 на 1, и затем прочитайте последнюю информацию об элементе, если c3p0, статус элемента имеет новое значение 1, , но Hikari, статус элемента по-прежнему равен 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>

I ожидайте получить последнее значение с Hikari. Есть ли проблемы с конфигурацией?

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

1 Ответ

1 голос
/ 06 января 2020

Возможно, эти 2 пула соединений имеют разные значения по умолчанию для уровня изоляции транзакции.

Попробуйте добавить <property name="transactionIsolation" value="TRANSACTION_READ_COMMITTED"

...