Java ChunkDon';运行spring批处理作业时,无法运行

Java ChunkDon';运行spring批处理作业时,无法运行,java,spring,spring-batch,Java,Spring,Spring Batch,我使用springBatch作业中的checkListener和readListener作为学习springBatch的示例。但是当我运行作业时,chunkListener不运行,只有readListener与作业一起运行 personChunkListener.java: package sb.dbToxml; import javax.batch.api.chunk.listener.ChunkListener; public class

我使用springBatch作业中的checkListener和readListener作为学习springBatch的示例。但是当我运行作业时,chunkListener不运行,只有readListener与作业一起运行

personChunkListener.java:



     package sb.dbToxml;

        import javax.batch.api.chunk.listener.ChunkListener;

        public class PersonChunkListener implements ChunkListener
        {

          @Override
          public void afterChunk() throws Exception
          {
            System.out.println("after chunk ....***************");

          }

          @Override
          public void beforeChunk() throws Exception
          {
            System.out.println("before chunk ....***************");

          }

          @Override
          public void onError(Exception arg0) throws Exception
          {
            // TODO Auto-generated method stub

          }

        }

this is the configuration xml file for spring batch context 
spring-batch-context.xml :





    <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/beans 


                               http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

        <import resource="../jobs/jobPerson.xml" />
        <import resource="../config/spring-datasource.xml" />

        <!-- <context:annotation-config /> <tx:annotation-driven transaction-manager="transactionManager"/>a 
            PlatformTransactionManager is still required -->

        <!-- JobRepository and JobLauncher are configuration/setup classes -->
        <bean id="jobRepository"
            class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
            <property name="dataSource" ref="dataSourceBatch" />
            <property name="transactionManager" ref="transactionManager" />
            <property name="databaseType" value="oracle" />
        </bean>

        <bean id="jobLauncher"
            class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
            <property name="jobRepository" ref="jobRepository" />
        </bean>

<bean id="jobPersonListener"     class="sb.dbToxml.PersonListener" />
         <bean id="personReadListener"    class="sb.dbToxml.PersonReadListener"/>
         <bean id="chunkListener"    class="sb.dbToxml.PersonChunkListener"/>


        <bean id="transactionManager"
            class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

    </beans>
这将更改作业配置: jobPerson.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc">

    <!--       *******    JdbcPagingItemReader ***** -->
    <bean id="itemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step">
      <property name="dataSource" ref="dataSource"/>
      <property name="queryProvider">
        <bean class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
          <property name="dataSource" ref="dataSource"></property>
          <property name="selectClause" value="SELECT internal_Id,individual_Id "></property>
          <property name="fromClause" value="FROM Person"></property>
          <property name="whereClause" value="where internal_Id &lt; :idMax"></property>
          <property name="sortKey" value="internal_Id"></property>
        </bean>
      </property>

      <property name="parameterValues">
        <map>
          <entry key="idMax" value="#{jobParameters['idMax']}"></entry>
        </map>
      </property>
      <property name="pageSize" value="50"></property>
      <property name="rowMapper">
        <bean class="sb.dbToxml.PersonRowMapper"></bean>
      </property>

    </bean>

    <bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
       <property name="resource" value="file:xml/persons.xml"/>
       <property name="marshaller"  ref="personMarshaller"/>
       <property name="rootTagName" value="person"/>
    </bean>

    <bean id="personMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
       <property name="classesToBeBound">
          <value>sb.dbToxml.Person </value>
       </property>
    </bean>



     <batch:job id="personJob">
        <batch:step id="step1bb1" >
            <batch:tasklet transaction-manager="transactionManager">
                <batch:chunk reader="itemReader" writer="itemWriter"   commit-interval="10" >
                </batch:chunk>
                <batch:listeners>
                 <batch:listener ref="chunkListener"/>
               </batch:listeners>
            </batch:tasklet>
            <!-- <batch:listeners>
                 <batch:listener ref="chunkListener"/>
            </batch:listeners> --> 
        </batch:step>
        <batch:listeners>
               <batch:listener ref="jobPersonListener" />
               <batch:listener ref="chunkListener"/>
        </batch:listeners> 

    </batch:job>



 </beans>

某人

ChunkListener
chunk
配置相关,因此需要在
chunk
标记中定义它,如下所示:

<batch:job id="personJob">
    <batch:step id="step1bb1" >
        <batch:tasklet transaction-manager="transactionManager">
            <batch:chunk reader="itemReader" writer="itemWriter" commit-interval="10" >
               <batch:listeners>
                  <batch:listener ref="chunkListener"/>
               </batch:listeners>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
           <batch:listener ref="jobPersonListener" />
    </batch:listeners> 
</batch:job>


此外,您的
PersonChunkListener
实现了
javax.batch.api.chunk.listener.ChunkListener
接口,但它应该实现
org.springframework.batch.core.ChunkListener

谢谢马哈茂德兄弟。你救了我一天。投票并接受答案。很高兴它有帮助!你们有这个问题的答案吗?
<batch:job id="personJob">
    <batch:step id="step1bb1" >
        <batch:tasklet transaction-manager="transactionManager">
            <batch:chunk reader="itemReader" writer="itemWriter" commit-interval="10" >
               <batch:listeners>
                  <batch:listener ref="chunkListener"/>
               </batch:listeners>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
           <batch:listener ref="jobPersonListener" />
    </batch:listeners> 
</batch:job>