调用 sqlSesssion.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 数据库的一些奇怪的未提交会话的任何相关信息
我在 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 数据库的一些奇怪的未提交会话的任何相关信息