Java 运行作业时,springBatch中的ItemReadListener未运行
我正在学习SpringBatch抛出一个简单的示例,从数据库中读取数据并将其写入xml文件。作业运行正常,但我看不到我放在ItemReadListener中的消息。配置中是否遗漏了某些内容?谢谢你的帮助。我会把最相关的代码,如果需要我可以添加更多 job.xml:Java 运行作业时,springBatch中的ItemReadListener未运行,java,spring,spring-batch,Java,Spring,Spring Batch,我正在学习SpringBatch抛出一个简单的示例,从数据库中读取数据并将其写入xml文件。作业运行正常,但我看不到我放在ItemReadListener中的消息。配置中是否遗漏了某些内容?谢谢你的帮助。我会把最相关的代码,如果需要我可以添加更多 job.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:
<?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">
<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 < :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="10"></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:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="jobPersonListener" />
<batch:listener ref="personReadListener"/>
</batch:listeners>
</batch:job>
</beans>
侦听器配置不正确 由此,
<batch:job id="personJob">
<batch:step id="step1bb1" >
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="itemReader" writer="itemWriter" commit-interval="10" />
</batch:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="jobPersonListener" />
<batch:listener ref="personReadListener"/>
</batch:listeners>
</batch:job>
应改为
<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="jobPersonListener" />
<batch:listener ref="personReadListener"/>
</batch:listeners>
</batch:tasklet>
</batch:step>
</batch:job>
ItemReadListener实现StepListener接口,而不是JobListener,因此它必须出现在步骤中。
<batch:job id="personJob">
<batch:step id="step1bb1" >
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="itemReader" writer="itemWriter" commit-interval="10" />
</batch:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="jobPersonListener" />
<batch:listener ref="personReadListener"/>
</batch:listeners>
</batch:job>
<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="jobPersonListener" />
<batch:listener ref="personReadListener"/>
</batch:listeners>
</batch:tasklet>
</batch:step>
</batch:job>