Java 如何获取Spring批处理中写入DB的条目数?
我有一个Java 如何获取Spring批处理中写入DB的条目数?,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个JobExecutionListener,它将执行后的作业状态写入日志文件。我如何获得处理的项目数量 @Component public class JobListener implements JobExecutionListener { @Override public void afterJob(JobExecution task) { log.info(task.getStatus()); //number of entri
JobExecutionListener
,它将执行后的作业状态写入日志文件。我如何获得处理的项目数量
@Component
public class JobListener implements JobExecutionListener {
@Override
public void afterJob(JobExecution task) {
log.info(task.getStatus());
//number of entries??
}
}
使用JobExplorer,您可以查看前面的步骤执行,以获取每个步骤中读取的项目数等。您可以在此处阅读有关JobExplorer的更多信息: 更新
实际上,您甚至不需要使用
JobExplorer
。由于您有作业执行
,因此您已经有了对所有步骤执行
的引用。每个步骤执行
包含读取、处理、写入、跳过等的项目数。使用JobExplorer,您可以查看前面的步骤执行,以获取每个步骤中读取的项目数等。您可以在此处阅读有关JobExplorer的更多信息:
更新
实际上,您甚至不需要使用
JobExplorer
。由于您有作业执行
,因此您已经有了对所有步骤执行
的引用。每个步骤执行
包含读取、处理、写入、跳过等的项目数。使用JobExplorer,您可以查看前面的步骤执行,以获取每个步骤中读取的项目数等。您可以在此处阅读有关JobExplorer的更多信息:
更新
实际上,您甚至不需要使用
JobExplorer
。由于您有作业执行
,因此您已经有了对所有步骤执行
的引用。每个步骤执行
包含读取、处理、写入、跳过等的项目数。使用JobExplorer,您可以查看前面的步骤执行,以获取每个步骤中读取的项目数等。您可以在此处阅读有关JobExplorer的更多信息:
更新
实际上,您甚至不需要使用
JobExplorer
。由于您有作业执行
,因此您已经有了对所有步骤执行
的引用。每个StepExecution
都包含读取、处理、写入、跳过等项的数量。我看到了两种方法
public class ItemCountsListener implements ItemProcessListener<Object, Object> {
private static final AtomicLong count = new AtomicLong(1);
public void afterProcess(Object item, Object result) {
count.getAndIncrement();
}
public void beforeProcess(Object item) {}
public void onProcessError(Object item, Exception e) { }
我有两种方法
public class ItemCountsListener implements ItemProcessListener<Object, Object> {
private static final AtomicLong count = new AtomicLong(1);
public void afterProcess(Object item, Object result) {
count.getAndIncrement();
}
public void beforeProcess(Object item) {}
public void onProcessError(Object item, Exception e) { }
我有两种方法
public class ItemCountsListener implements ItemProcessListener<Object, Object> {
private static final AtomicLong count = new AtomicLong(1);
public void afterProcess(Object item, Object result) {
count.getAndIncrement();
}
public void beforeProcess(Object item) {}
public void onProcessError(Object item, Exception e) { }
我有两种方法
public class ItemCountsListener implements ItemProcessListener<Object, Object> {
private static final AtomicLong count = new AtomicLong(1);
public void afterProcess(Object item, Object result) {
count.getAndIncrement();
}
public void beforeProcess(Object item) {}
public void onProcessError(Object item, Exception e) { }
我就是这样做的:
JobExecution job = jobLauncher.run(praepJob, getJobParameters());
job.getStepExecutions().stream().findFirst().get().getWriteCount()
我就是这样做的:
JobExecution job = jobLauncher.run(praepJob, getJobParameters());
job.getStepExecutions().stream().findFirst().get().getWriteCount()
我就是这样做的:
JobExecution job = jobLauncher.run(praepJob, getJobParameters());
job.getStepExecutions().stream().findFirst().get().getWriteCount()
我就是这样做的:
JobExecution job = jobLauncher.run(praepJob, getJobParameters());
job.getStepExecutions().stream().findFirst().get().getWriteCount()
两方面,
<bean id="jobOperator"
class="org.springframework.batch.core.launch.support.SimpleJobOperator">
<property name="jobRegistry" ref="jobRegistry" />
<property name="jobExplorer" ref="jobExplorer" />
<property name="jobLauncher" ref="jobLauncher" />
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="tablePrefix" value="BATCH_" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="batchTaskExecutor"></property>
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="oracle" />
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="batchTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="25" />
<property name="queueCapacity" value="30" />
</bean>
两种方式
<bean id="jobOperator"
class="org.springframework.batch.core.launch.support.SimpleJobOperator">
<property name="jobRegistry" ref="jobRegistry" />
<property name="jobExplorer" ref="jobExplorer" />
<property name="jobLauncher" ref="jobLauncher" />
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="tablePrefix" value="BATCH_" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="batchTaskExecutor"></property>
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="oracle" />
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="batchTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="25" />
<property name="queueCapacity" value="30" />
</bean>
两种方式
<bean id="jobOperator"
class="org.springframework.batch.core.launch.support.SimpleJobOperator">
<property name="jobRegistry" ref="jobRegistry" />
<property name="jobExplorer" ref="jobExplorer" />
<property name="jobLauncher" ref="jobLauncher" />
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="tablePrefix" value="BATCH_" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="batchTaskExecutor"></property>
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="oracle" />
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="batchTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="25" />
<property name="queueCapacity" value="30" />
</bean>
两种方式
<bean id="jobOperator"
class="org.springframework.batch.core.launch.support.SimpleJobOperator">
<property name="jobRegistry" ref="jobRegistry" />
<property name="jobExplorer" ref="jobExplorer" />
<property name="jobLauncher" ref="jobLauncher" />
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="tablePrefix" value="BATCH_" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="batchTaskExecutor"></property>
</bean>
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="databaseType" value="oracle" />
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="batchTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="25" />
<property name="queueCapacity" value="30" />
</bean>
如何获取对JobExplorer
的引用?我在侦听器中只有JobExecution
对象……在您的JobExecutionListener中,您必须注入它。您使用的是java配置还是基于XML的配置?哦,好的,是的,我使用的是基于注释的配置。嗯,但我仍然不知道如何获得从JobExplorer
@MichaelMinella读取的项目数,为什么没有作业执行的总体计数?如何获得对JobExplorer
的引用?我在侦听器中只有JobExecution
对象……在您的JobExecutionListener中,您必须注入它。您使用的是java配置还是XML库