Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取Spring批处理中写入DB的条目数?_Java_Spring_Spring Batch - Fatal编程技术网

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()
    
    两方面,

  • 使用JobExecution,在这里您可以访问StepExecution,从而可以获得StepRead、write或errors
  • SpringBatch将其所有作业和步骤数据存储在批处理表中。您可以在此处查阅文档:
  • 如果您使用的是元数据表,那么您可以配置jobExplorer来获取元数据

    使用xml,您可以将其配置为

    <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>
    
    
    
    两种方式

  • 使用JobExecution,在这里您可以访问StepExecution,从而可以获得StepRead、write或errors
  • SpringBatch将其所有作业和步骤数据存储在批处理表中。您可以在此处查阅文档:
  • 如果您使用的是元数据表,那么您可以配置jobExplorer来获取元数据

    使用xml,您可以将其配置为

    <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>
    
    
    
    两种方式

  • 使用JobExecution,在这里您可以访问StepExecution,从而可以获得StepRead、write或errors
  • SpringBatch将其所有作业和步骤数据存储在批处理表中。您可以在此处查阅文档:
  • 如果您使用的是元数据表,那么您可以配置jobExplorer来获取元数据

    使用xml,您可以将其配置为

    <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>
    
    
    
    两种方式

  • 使用JobExecution,在这里您可以访问StepExecution,从而可以获得StepRead、write或errors
  • SpringBatch将其所有作业和步骤数据存储在批处理表中。您可以在此处查阅文档:
  • 如果您使用的是元数据表,那么您可以配置jobExplorer来获取元数据

    使用xml,您可以将其配置为

    <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库