2013-07-16 2 views
5

Im, используя SpringBatch 2.1.7 и ядро ​​инфраструктуры, чтобы прочитать CSV-файл и сохранить его в DB.Попытка обновить выполнение шага id = 1 с неправильной версией (2), где текущая версия: 1

Встроенный мой код с планировщиком Spring Quartz для запуска в течение каждой минуты, The Batch работает нормально с чтением и записью, но с ошибкой «org.springframework.dao.OptimisticLockingFailureException: попытка обновления шага id = 1 с неправильная версия (2), где текущая версия 1 "

из-за конфликтов Tx. Пожалуйста, предложите, как я могу решить эту проблему.

+0

Привет любое обновление по этому поводу? – user2583922

+0

Вы решили это? – surlac

+1

Это может решить вашу проблему http://ashamathavan.blogspot.in/2010/12/optimisticlockingfailureexception.html –

ответ

3

У меня было такое же исключение.

org.springframework.dao.OptimisticLockingFailureException: 
Attempt to update step execution id=0 with wrong version (2), where current version is 3 

В моем случае это было вызвано провалом процесса, который проглатывался. Spring Batch активировал запись, хотя процессор потерпел неудачу. Просмотрите свои журналы, чтобы убедиться, что ваш шаг процесса завершает и возвращает что-то.

1

Как указывал MattC, у меня была эта ошибка, когда прослушивался мой ItemProcessor. По какой-то причине, во время моего процессора деятельности, он закрывал соединение источника данных с jobrepository, так что мое исключение было:

Encountered an error saving batch meta data for step step1 in job myjob. This job is now in an unknown state and should not be restarted. 
org.springframework.dao.OptimisticLockingFailureException: Attempt to update step execution id=1 with wrong version (1), where current version is 2 

В конце StackTrace, я смог найти:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection is closed. 

Чтобы идентифицировать проблему, сначала выделим фазу. Я построил NoOpProcessor и NoOpItemWriter. Скорректированный тасклет, и он работал хорошо. Поэтому моя проблема не была в отношении читателя.

Затем я откатился к своей «полной» реализации ItemWriter, и снова он работал хорошо. Так что моя проблема была не с автором. Когда я включил свой «полный» процессор, ошибка снова возникла. Итак, в нем была ошибка, и я начал отладку.

Так, к сожалению, мой ответ: отлаживать ...

public class NoOpProcessor implements ItemProcessor<Object, Object> { 
    @Override 
    public Object process(Object arg0) throws Exception { 
     System.out.println("Input object: " + Objects.toString(arg0));  
     return arg0; 
    } 
} 

public class NoOpItemWriter implements ItemWriter<Object> { 
    @Override 
    public void write(List<? extends Object> items) throws Exception { 
     if (items != null) { 
      System.out.println("Qtty of items to be written: " + items.size()); 
      for (Object obj : items) { 
       System.out.println(Objects.toString(obj)); 
      } 
     } else { 
      System.out.println("The items list is null. Nothing to be written."); 
     } 
    } 
}