簡體   English   中英

在Spring Batch中將jobParameters傳遞給bean

[英]Passing jobParameters to bean in Spring Batch

我從鏈接https://stackoverflow.com/q/15784984/814074閱讀了一個問題,並嘗試了上面鏈接中給出的解決方案。 但是,在運行代碼時出現以下錯誤:

Error creating bean with name 'JobArgs' defined in class path resource [pipelineJob.xml]: 
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy2 implementing java.io.Serializable,org.springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'com.test.genepanel.job.JobArguments' for property 'jobArguements'; nested exception is java.lang.IllegalStateException:
Cannot convert value of type [$Proxy2 implementing java.io.Serializable,org.springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.test.genepanel.job.JobArguments] for property 'jobArguements': no matching editors or conversion strategy found

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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/batch
            http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util-2.5.xsd">

    <batch:job id="pipelineJob">
        <batch:step id="initializationStep" next="CleanUPStep">
            <batch:tasklet ref="initializationStepTasklet" />
        </batch:step>
        <batch:step id="CleanUPStep">
            <batch:tasklet ref="cleanupTaskLet" />
        </batch:step>
    </batch:job>



    <bean id="basicStep" class="com.test.mutation.steps.BasicStep" abstract="true">
        <property name="testJobArgs" ref="JobArgs"/>
    </bean>

    <bean id="JobArgs" class="com.test.mutation.application.TestJobArguements">
        <property name="jobArguements" ref="jobArg"> 
        </property>
    </bean>

    <bean id="jobArg" class="com.test.genepanel.job.JobArguments" scope="step">
        <constructor-arg value="#{jobParameters['jobOutputDir']}"/>
    </bean>

    <bean id="emptyTaskLet" class="com.test.mutation.steps.EmptyStep" scope="step" parent="basicStep" />

    <bean id="cleanupTaskLet" class="com.test.mutation.steps.CleanUpStep" scope="step" parent="basicStep">
    </bean>

    <bean id="initializationStepTasklet" class="com.test.mutation.steps.InitializationStep"  scope ="step" parent="basicStep">
    </bean> 
</beans>

我有什么想念的嗎?

使用步驟范圍的簡單方法是這樣的:

<bean id="myReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="resource" value="file:#{jobParameters['input.file']}" />
    <property name="linesToSkip" value="0" />
    <property name="recordSeparatorPolicy" ref="simpleRecordPolicy" />
    <property name="lineMapper" ref="journalSicIemtLineMapper" />
</bean>

將步驟作用域放在bean上將延遲其創建,直到其引用的步驟即將開始。 這就是后期綁定的含義,因此您可以在ExecutionContext中訪問變量。

正如StepScope中的文檔所述:

具有StepScope的bean將是aop:scoped-proxy。 這意味着代理會繞過真實對象。

因此,當您定義常規的Spring Beans(就像對jobArg所做的那樣)並在其上放上scope = step時。 當您想在另一個Bean(JobArgs)中設置對象時,必須找到一種方法來檢索該代理內的對象

我遍歷了Spring的所有引用,並且在構造函數參數中沒有看到后期綁定,因此我不確定它是否有效。 我假設您在JobArgs中設置JobArgs ,在這種情況下,它應該具有相同的scope="step"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM