调用sqlSesssion.flushStatement()时系统挂起

时间:2019-06-09 16:30:18

标签: oracle spring-boot sql-update executorservice sql-sessions

我在MyBatis上使用一些sql查询将数据更新到我的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();
}

这是MyBatis .xml文件

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

但是奇怪的是,当我调用insert sql语句时,一切正常,系统将挂起或卡在sqlSession.flushStatements();上,并且仅当我更改为更新sql语句时,才不会引发任何错误。

更新 即使我使用普通的MyBatis更新查询也会使整个系统挂起,但是如果我使用插入查询,则什么也不会发生。

我执行的常规更新查询

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

1 个答案:

答案 0 :(得分:0)

这个问题已经被怪异地解决了,尽管实际上我重新启动了服务器,但似乎某个地方存在一些未提交的会话。

只需手动单击Oracle数据库中的commit按钮,然后我的程序就可以更新数据库中的数据。

请随时在此处分享有关Oracle数据库一些奇怪的未提交会话的任何相关信息