[英]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.