我正在尝试在批处理会话对象上运行自定义 sql
@Insert("INSERT INTO ticker(Ticker, GetUpdate) VALUES(#{symbol}, 1) ON DUPLICATE KEY UPDATE GetUpdate = 1")
void enableQuoteforSymbol(@Param("symbol") String symbol);
但是我的以下代码(负责刷新和提交批次)有一些神秘的行为
while(true == continueProcessing.get())
{
List<BatchResult> batchResult;
try
{
batchResult = batchSqlSession.flushStatements();
if(batchResult.size() > 0 )
{
batchSqlSession.commit();
batchSqlSession.clearCache();
}
Thread.sleep(configurationManager.BATCH_COMMITER_DELAY);
}
catch (Exception ex)
{
logger.error("BatchService::run() - ", ex);
}
}
它执行完美,并且 batchSqlSession.flushStatements() 确实返回了已执行语句的数量。尽管成功执行了上一个批处理,但此代码batchResult = batchSqlSession.flushStatements(); 和batchSqlSession.commit(); 在下一次迭代中重新运行相同的旧批次。为什么 ?