代码之家  ›  专栏  ›  技术社区  ›  Nipuna Don Pranciscu

Spring批处理读取器抱怨资源

  •  1
  • Nipuna Don Pranciscu  · 技术社区  · 7 年前

    当我尝试启动spring boot应用程序时,出现了以下错误。它甚至在我提供我的作业参数之前就给出了一个错误,我的作业参数就是我的作业参数。

    大量讨论建议将资源用作 file:#{jobParameters[controlFileInput]} 解决这个问题。但这对我不起作用。提前谢谢。

    批处理xml

        <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:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/batch
        http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    
        <context:property-placeholder location="classpath:application.properties" />
        <bean id="stepScope" class="org.springframework.batch.core.scope.StepScope">
            <property name="autoProxy" value="true" />
        </bean>
        <bean id="billItemWriteListener"
            class="com.telstra.billubfreader.listener.BillItemWriteListener" />
        <bean id="billItemProcessListener"
            class="com.telstra.billubfreader.listener.BillItemProcessListener" />
    
        <bean id="fileMovingToErrorTasklet"class="com.telstra.billubfreader.ErrorFileMover" />
        <bean id="fileMovingToSuccessTasklet"
            class="com.telstra.billubfreader.SuccessFileMover" />
    
        <bean id="billControlFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"
            scope="step">
            <property name="resource" value="file:#{jobParameters[controlFileInput]}" />
            <property name="linesToSkip" value="${control.linetoskip}" />
            <property name="lineMapper">
                <bean class="com.telstra.billubfreader.mapper.BillControlLineMapper">
                    <property name="lineTokenizer">
                        <bean   class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean
                            class="com.telstra.billubfreader.mapper.BillControlFieldDataMapper" />
                    </property>
                </bean>
            </property>
        </bean>
        <bean id="billControlItemProcessor" class="com.telstra.billubfreader.BillControlItemProcessor"
            scope="step">
        </bean>
        <bean id="billControFileItemwriter" class="com.telstra.billubfreader.BillControlItemWriter"
            scope="step">
        </bean>
    
    
        <batch:job id="billControlFileReaderJob" restartable="true">
            <batch:step id="billControlFileRaderStep1">
                <batch:tasklet>
                    <batch:chunk reader="billControlFileItemReader"
                        processor="billControlItemProcessor" writer="billControFileItemwriter"
                        commit-interval="25">
                        <batch:listeners>
                            <batch:listener ref="billItemWriteListener" />
                            <batch:listener ref="billItemProcessListener" />
                            <batch:listener ref="promotionListener"/>
    
                        </batch:listeners>
                    </batch:chunk>
                </batch:tasklet>
                 <batch:next on="FAILED" to="fileMovingtoError" />
                  <batch:next on="COMPLETED" to="fileMovingToSuccess" />
            </batch:step>
            <batch:step id="fileMovingtoError">
            <tasklet ref="fileMovingToErrorTasklet"/>
            </batch:step>
            <batch:step id="fileMovingToSuccess">
            <tasklet ref="fileMovingToSuccessTasklet"/>
            </batch:step>
        </batch:job>
        <bean id="promotionListener"
    class="org.springframework.batch.core.listener.ExecutionContextPromotionListener">
        <property name="keys" value="filesToMove"/>
    </bean>
    
    </beans>
    

    日志

    2018-04-25 12:10:05.779信息22716---[主]o.s.batch。果心工作SimpleStepHandler:步骤已完成或无法重新启动,因此没有要执行的操作:步骤执行:id=1,版本=15,名称=billControlFileRaderStep1,状态=放弃,exitStatus=失败,readCount=0,filterCount=0,writeCount=0 readSkipCount=0,writeSkipCount=0,processSkipCount=0,commitCount=0,rollbackCount=0,exitDescription=org。springframework。一批项目ItemStreamException:未能初始化读取器 位于组织。springframework。一批项目支持AbstractItemCountingItemStreamItemReader。打开(AbstractItemCountingItemStreamItemReader.java:149) 在太阳下。反映NativeMethodAccessorImpl。invoke0(本机方法) 在太阳下。反映NativeMethodAccessorImpl。调用(未知源) 在太阳下。反映DelegatingMethodAccessorImpl。调用(未知源) 在java。lang.reflect。方法调用(未知源) 位于组织。springframework。aop。支持A计算机。invokeJoinpointUsingReflection(AopUtils.java:338) 位于组织。springframework。aop。框架ReflectiveMethodInvocation。invokeJoinpoint(ReflectiveMethodInvocation.java:197) 位于组织。springframework。aop。框架ReflectiveMethodInvocation。继续(ReflectiveMethodInvocation.java:163) 位于组织。springframework。aop。支持委派导入接收器。doProceed(DelegatingIntroductionInterceptor.java:136) 位于组织。springframework。aop。支持委派导入接收器。invoke(DelegatingIntroductionInterceptor.java:124) 位于组织。springframework。aop。框架ReflectiveMethodInvocation。继续(ReflectiveMethodInvocation.java:185) 位于组织。springframework。aop。框架JDKDDynamicApproxy。调用(jdkDynamicApproxy.java:212) 在com。太阳代理$Proxy52。打开(未知源) 位于组织。springframework。一批项目支持CompositeItemStream。打开(CompositeItemStream.java:103) 位于组织。springframework。一批果心步微线程。TaskletStep。打开(TaskletStep.java:310) 位于组织。springframework。一批果心步抽象步骤。执行(AbstractStep.java:197) 位于组织。springframework。一批果心工作SimpleStepHandler。handleStep(SimpleStepHandler.java:148) 位于组织。springframework。一批果心工作流JobFlowExecutor。executeStep(JobFlowExecutor.java:66) 位于组织。springframework。一批果心工作流支持状态StepState。句柄(StepState.java:67) 位于组织。springframework。一批果心工作流支持SimpleFlow。简历(SimpleFlow.java:169) 位于组织。springframework。一批果心工作流支持SimpleFlow。开始(SimpleFlow.java:144) 位于组织。springframework。一批果心工作流FlowJob。doExecute(FlowJob.java:136) 位于组织。springframework。一批果心工作AbstractJob。执行(AbstractJob.java:308) 位于组织。springframework。一批果心发射支持SimpleJoblancher 1美元。run(simplejoblancher.java:141) 位于组织。springframework。果心任务SyncTaskExecutor。执行(SyncTaskExecutor.java:50) 位于组织。springframework。一批果心发射支持SimpleZoblancher。run(SimpleJobuncher.java:134 2018-04-25 12:10:06.201信息22716---[主]o.s.batch。果心工作SimpleStepHandler:步骤已完成或无法重新启动,因此没有要执行的操作:步骤执行:id=2,版本=3,名称=fileMovingtoError,状态=COMPLETED,exitStatus=COMPLETED,readCount=0,filterCount=0,writeCount=0 readSkipCount=0,writeSkipCount=0,processSkipCount=0,commitCount=1,rollbackCount=0,exitDescription= 2018-04-25 12:10:06.334信息22716-[主要]o.s.b.c.l.支持。SimpleJobLauncher:作业:[FlowJob:[名称=billControlFileReaderJob]]完成

    1 回复  |  直到 7 年前
        1
  •  2
  •   Nipuna Don Pranciscu    7 年前

    我在这里发现了问题。问题是 SpringApplication.run 在启动作业之前执行作业。因此,它没有作业参数。设置弹簧。一批工作enabled=false解决了问题。