Я пытаюсь выполнить пакетное выполнение, вставляя записи массово и выполняя SQL оценку, к которой я прибегаю к sql переменным, как я уже писал и использовал подобные переменные SQL ранее в динамическом c запросов, использующих sql переменных, объявленных в разделах sql / pl, таких как "DECLARE ... BEGIN ... END;" ,
Запросы генерируются и вставляются, но не фиксируются. Однако через несколько секунд я получаю следующее сообщение об ошибке:
<Mar 23, 2020 4:02:11 PM EDT> <Warning> <Socket> <BEA-000449> <Closing the socket, as no data read from it on 0:0:0:0:0:0:0:1:58,508 during the configured idle timeout of 5 seconds.>
<Mar 23, 2020 4:12:22 PM EDT> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "616" seconds working on the request "Http Request Information: weblogic.servlet.internal.ServletRequestImpl@2ad39f52[POST /DemoApp/fileUpload]
", which is more than the configured time (StuckThreadMaxTime) of "600" seconds in "server-failure-trigger". Stack trace:
Вот RecordsMapper. java, который имеет блок запроса sql / pl:
@Select("DECLARE " +
" record_no number(8); " +
" prog_no number(8); " +
" BEGIN " +
" select (id+1) into record_no from Keyz where id_type='REC'; " +
" update Keyz set id=id+1 where id_type='REC'; " +
" select (id+1) into prog_no from Keyz where id_type=upper('rec'); " +
" update Keyz set id=id+1 where id_type=upper('rec'); " +
" ${deleteStatement}; " +
" ${insertStatement}; " +
" END; ")
void ProgramUploadBatch(Map<String, String> record);
Мой класс DaoImpl имеет :
@Repository("recordsdao")
public class RecordsDaoImpl extends SqlSessionDaoSupport implements RecordsDao,Serializable {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Override
try(SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)){
RecordsMapper recordsmapper = sqlSession.getMapper(RecordsMapper.class);
for (Map<String, String> record : recordList) {
recordsmapper.ProgramUploadBatch(record);
}
sqlSession.commit(true);
} catch (Exception e) {
System.out.println("Error occured while performing execution: " + e.getCause());
}
Класс контроллера:
@Autowired
private RecordsService recordsservice;
.
.
.
@RequestMapping(value="/fileUpload")
public String demoApp(){
recordsservice.ProgramUploadBatch(allQueries);
}
Здесь я пытаюсь выполнить операцию удаления, вставив предварительно сгенерированный запрос на удаление в ${deleteStament}
, и вставить операцию с помощью вставка новой записи в ${insertStatement}
, которая также будет предварительно сгенерированным запросом со значениями. Обе переменные record_no
и prog_no
используются в предварительно сгенерированных запросах.
Редактировать: после разбивки запросов на запросы * stati c я заметил, что метод обновления не обновляет кортеж и застревает оттуда.