バッチセッションオブジェクトでカスタム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(); 次の反復で同じ古いバッチを再実行します。なぜ ?