我正在尝试在批处理会话对象上运行自定义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(); 在下一次迭代中重新运行相同的旧批处理。为什么?