Я использую некоторый sql-запрос с MyBatis для обновления данных в моей базе данных 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();
}
Thisтакое 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);