簡體   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