Spring批处理条件流配置错误

时间:2019-06-13 16:56:50

标签: spring-batch xml-configuration

我有一个XML配置的步骤,并且我想添加batch:next元素以便在工作中获得条件流动:

    <batch:step id="stepLoadCashFlows">
        <batch:next on="*" to="stepCleanOldTrades" />
        <batch:next on="FAILED" to="stepCleanCurrentTradesOnError" />
        <batch:tasklet>
            <batch:chunk reader="cashFlowItemReader" writer="cashFlowItemWriter"
                processor="cashFlowsProcessor" commit-interval="10000" skip-limit="${cds.skip.limit}">
                <batch:skippable-exception-classes>
                    <batch:include class="org.springframework.integration.transformer.MessageTransformationException" />
                </batch:skippable-exception-classes>
            </batch:chunk>
        </batch:tasklet>
        <listeners>
            <listener ref="cashFlowWriterListener" />
        </listeners>
    </batch:step>

这给我以下错误:

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:cpm-batch-main-cds-load.xml]
Offending resource: class path resource [cpm-dml-subscriber-cds-top-level.xml]; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 80 in XML document from class path resource [cpm-batch-main-cds-load.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 80; columnNumber: 19; cvc-complex-type.2.4.a : Invalid content found starting with element 'batch:tasklet'. One of the following values '{"http://www.springframework.org/schema/batch":next, "http://www.springframework.org/schema/batch":stop, "http://www.springframework.org/schema/batch":end, "http://www.springframework.org/schema/batch":fail, "http://www.springframework.org/schema/batch":listeners}' is expected.

那么我应该把它们放在哪里(我已经在步骤末了,在tasklet中尝试过...)?

1 个答案:

答案 0 :(得分:1)

transitions元素应放在tasklet元素之后。因此,在您的情况下,以下方法应该起作用:

<batch:step id="stepLoadCashFlows">
    <batch:tasklet>
        <batch:chunk reader="cashFlowItemReader" writer="cashFlowItemWriter"
            processor="cashFlowsProcessor" commit-interval="10000" skip-limit="${cds.skip.limit}">
            <batch:skippable-exception-classes>
                <batch:include class="org.springframework.integration.transformer.MessageTransformationException" />
            </batch:skippable-exception-classes>
        </batch:chunk>
        <batch:listeners>
           <batch:listener ref="cashFlowWriterListener" />
        </batch:listeners>
    </batch:tasklet>
    <batch:next on="*" to="stepCleanOldTrades" />
    <batch:next on="FAILED" to="stepCleanCurrentTradesOnError" />
</batch:step>

请注意,listeners元素应位于tasklet元素内。