Spring Batch - ile rekordów jest odczytywanych i przetwarzanych


Czy możesz powiedzieć, ile rekordów jest odczytywanych i/lub przetwarzanych po zakończeniu zadania? Mam zadanie, które odczytuje dane z bazy danych iw procesorze, filtruję wiele rekordów na podstawie określonych kryteriów i wysyłam je do autora. Chciałbym wiedzieć, ile wszystkich rekordów jest odczytywanych z bazy danych i ile jest wysyłanych na krok zapisu.
Oto mój plik konfiguracji wsadowej.
<bean id="dbItemReader" class="....JdbcCursorItemReader">
<property name="datasource" ref="datasource"/>
<property name="sql" ref="select * from"/>
<property name="rowMapper">
<bean class="com.my.MyRowMapper"/>
</property>
</bean><bean id="itemProcessor" class="com.my.MyItemProcessor"/>
<bean id="itemWriter" class="com.my.MyItemWriter"/><batch:job id="myJob">
<batch:step id="step1">
<batch:tasklet transaction-manager="jobTransactionManager">
<batch:chunk reader="dbItemReader" processor="itemProcessor" writer="itemWriter" commit-interval="100"/>
</batch:tasklet>

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Pakiet wiosenny przechowuje liczbę elementów przeczytanych, przetworzonych, pominiętych, zapisanych itp. W magazynie zadań. Zakładając, że korzystasz z repozytorium zadań bazy danych, możesz je tam wyświetlić w tabeli
BATCH_STEP_EXECUTION
.
Możesz przeczytać więcej o informacjach przechowywanych w repozytorium zadań w dokumentacji tutaj:

http://docs.spring.io/spring-b ... .html
http://docs.spring.io/spring-b ... .html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

import org.apache.log4j.Logger;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
/**
* Vaquar khan
*/
public class StepExecuListner implements StepExecutionListener {
static Logger log = Logger.getLogger("badRecordLogger"); @Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - beforeStep");
log.error("StepExecutionListener - beforeStep " ); } @Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - afterStep");
log.error("------------------------------------------------------------------------------------");
log.error("StepExecutionListener - afterStep:getCommitCount=" + stepExecution.getCommitCount());
log.error("StepExecutionListener - afterStep:getFilterCount=" + stepExecution.getFilterCount());
log.error("StepExecutionListener - afterStep:getProcessSkipCount=" + stepExecution.getProcessSkipCount());
log.error("StepExecutionListener - afterStep:getReadCount=" + stepExecution.getReadCount());
log.error("StepExecutionListener - afterStep:getReadSkipCount=" + stepExecution.getReadSkipCount());
log.error("StepExecutionListener - afterStep:getRollbackCount=" + stepExecution.getRollbackCount());
log.error("StepExecutionListener - afterStep:getWriteCount=" + stepExecution.getWriteCount());
log.error("StepExecutionListener - afterStep:getWriteSkipCount=" + stepExecution.getWriteSkipCount());
log.error("StepExecutionListener - afterStep:getStepName=" + stepExecution.getStepName());
log.error("StepExecutionListener - afterStep:getSummary=" + stepExecution.getSummary());
log.error("StepExecutionListener - afterStep:getStartTime=" + stepExecution.getStartTime());
log.error("StepExecutionListener - afterStep:getStartTime=" + stepExecution.getEndTime());
log.error("StepExecutionListener - afterStep:getLastUpdated=" + stepExecution.getLastUpdated());
log.error("StepExecutionListener - afterStep:getExitStatus=" + stepExecution.getExitStatus());
log.error("StepExecutionListener - afterStep:getFailureExceptions=" + stepExecution.getFailureExceptions());
log.error("------------------------------------------------------------------------------------"); return null;
}
}

wewnątrz wsadu xml
<bean id="stepListener" class="com.test.listener.StepListner"/><batch:job id="TestDataLoader">
<batch:split id="split1" task-executor="taskExecutor">
<batch:flow>
<batch:step id="step1">
<batch:tasklet task-executor="taskExecutor" throttle-limit="5">
<batch:chunk reader="itemReader" writer="itemWriter" commit-interval="${commitInterval}" skip-limit="3"> <batch:skippable-exception-classes>
<batch:include class="java.lang.NumberFormatException"/>
</batch:skippable-exception-classes>
<batch:listeners>
<batch:listener ref="skipListener"/>
<batch:listener ref="stepListener"/>
</batch:listeners>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:flow> <batch:flow>
<batch:step id="step2">
<batch:tasklet task-executor="taskExecutor" throttle-limit="15">
<batch:chunk reader="itemReaderToDelete"
writer="itemWriterToDelete" commit-interval="${commitInterval}" skip-limit="3">
<batch:skippable-exception-classes>
<batch:include class="org.springframework.dao.DataAccessException"/>
<batch:include class="java.lang.NumberFormatException"/>
</batch:skippable-exception-classes>
<batch:listeners>
<batch:listener ref="skipListener"/>
<batch:listener ref="stepListener"/>
</batch:listeners>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:flow> </batch:split>
</batch:job>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

najprostszym podejściem jest to, że możesz użyć słuchacza na swoim kroku i możesz uzyskać wszystkie obliczenia.
<batch:job id="myJob">
<batch:step id="step1">
<batch:tasklet transaction-manager="jobTransactionManager">
<batch:chunk reader="dbItemReader"
processor="itemProcessor"
writer="itemWriter"
commit-interval="100"> <bean id="customStepListner" class="com.company.listner.StepListner"/> </batch:chunk>
</batch:tasklet>
public class StepListner implements StepExecutionListener {
@Override
public ExitStatus afterStep(StepExecution arg0) {
int readCount=arg0.getReadCount();
int writeCount=arg0.getWriteCount();
int skipCount=arg0.getSkipCount();
int commitCount=arg0.getCommitCount(); arg0.getStartTime();
arg0.getEndTime(); } @Override
public void beforeStep(StepExecution arg0) { }
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się