2013-07-16 16 views
5

Im przy użyciu słoików wydania SpringBatch 2.1.7 i infrastruktury sczytywania pliku CSV i zapisania go do DB.Próba aktualizacji kroku wykonania id = 1 z nieprawidłową wersją (2), gdzie aktualna wersja to 1

Zintegrowałem mój kod z wiosennym terminarzem kwarcu, aby działał co minutę, partia działa dobrze z odczytywaniem i pisaniem, ale jej błąd kończy się błędem "org.springframework.dao.OptimisticLockingFailureException: próba aktualizacji kroku wykonania id = 1 z Zła wersja (2), gdzie aktualna wersja to 1 "

z powodu konfliktów Tx. Proszę zasugerować, w jaki sposób mogę rozwiązać ten problem.

+0

Hi każdej aktualizacji w tej sprawie? – user2583922

+0

Rozwiązałeś to? – surlac

+1

To może rozwiązać Twój problem http://ashamathavan.blogspot.in/2010/12/optimisticlockingfailureexception.html –

Odpowiedz

3

Miałem ten sam wyjątek.

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

W moim przypadku było to spowodowane niepowodzeniem w procesie, który został połknięty. Spring Batch aktywował program piszący, mimo że procesor się nie powiódł. Przejrzyj swoje dzienniki, aby upewnić się, że krok procesu kończy się i zwraca coś.

1

Jak wskazał MattC, miałem ten błąd, gdy mój ItemProcessor był błędny. Z jakiegoś powodu, podczas moich zajęć procesorów, było zamknięcie połączenia źródła danych z jobrepository, więc moja Wyjątek:

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 

Pod koniec stacktrace, udało mi się znaleźć:

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

Aby zidentyfikować problem, najpierw izoluję fazę. Zbudowałem NoOpProcessor i NoOpItemWriter. Poprawiono zadanie i działało dobrze. Więc mój problem nie był skierowany do czytelnika.

Potem powróciłem do mojej "pełnej" implementacji ItemWriter i znowu zadziałało. Więc mój problem nie dotyczył pisarza. Kiedy włączyłem mój "pełny" procesor, błąd wystąpił ponownie. Więc błąd był w tym i zacząłem debugowanie.

Tak, niestety, moja odpowiedź brzmi: debug ...

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."); 
     } 
    } 
}