Система зависает при вызове sqlSesssion.flushStatement () - PullRequest
0 голосов
/ 09 июня 2019

Я использую некоторый sql-запрос с MyBatis для обновления данных в моей базе данных Oracle, но система останавливается на полпути и не выдает никакой ошибки.

Некоторые форумы говорят, что это может произойти из-за размера пула соединений,Тайм-аут проблема или может быть проблема конфигурации SqlSessionFactory.

Я изменил все время ожидания до 30 секунд, но все еще имею ту же проблему

//my hikari datasource setup
@Bean
public HikariDataSource dataSource() {
    HikariDataSource db = new HikariDataSource();
    db.setDriverClassName(driverClassName);
    db.setJdbcUrl(url);
    db.setUsername(username);
    db.setPassword(pwd);
    db.setReadOnly(false);
    db.setMaximunPoolSize(80);
    db.setConnectionTimeout(30000);
    db.setIdleTimeout(30000);
    db.setMaxLifetime(30000);
    db.setMinimunIdle(5);
    db.setValidationTimeout(500);
    return db;
}

Раздел, который я вызываю, обновляет мою базу данных Oracle

try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
  ItemMapper mapper = sqlSession.getMapper(ItemMapper.class);

  for (Object obj: lists) {
    //It only works fine when I'm calling insert function
    mapper.update(obj);
  }

 //After running this statement then system got stucked
  sqlSession.flushStatements();
  sqlSession.clearCache();
  sqlSession.commit();
} catch (Exception ex) {
  ex.printStackTrace();
}

Thisтакое MyBatis .xml файл

<update id="update">
  UPDATE <include refid="tableName" />
  SET
    item_price = #{price},
    update_time = #{updateTime}
  WHERE id = #{id}
</update>

Но странные вещи в том, что все работает нормально, когда я вызываю оператор вставки sql, система зависает или застревает на sqlSession.flushStatements(); и не выдает никаких ошибок только при измененииобновить оператор SQL.

ОБНОВЛЕНИЕ Даже если я использую обычный запрос на обновление MyBatis, это также приводит к зависанию всей системы, но ничего не происходит, если я использую запрос вставки ..

Нормальное обновлениезапрос я выполняю

Obj obj = new Obj();
obj.setprice("1");
obj.setupdateTime(new Date());
mapper.update(obj);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...