繁体   English   中英

系统在调用 sqlSession.flushStatement() 时挂起

[英]The system hang while calling sqlSesssion.flushStatement()

我正在使用 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 stuck
  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>

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

更新即使我使用普通的 MyBatis 更新查询也会使整个系统挂起,但如果我使用插入查询,则不会发生任何事情..

我执行的正常更新查询

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM