2011-06-22 5 views
1

私はitemReaderのJobParametersにアクセスしようとしていますが、私は春のユーザーガイドの "JobとStep AttributesのLate Binding"に従っていますが、動作させることはできません。 春バッチ2.1.8 春コア3.0.5JobParameter&ItemReader

<bean id="ipcFileReader" scope="step" class="org.springframework.batch.item.file.FlatFileItemReader"> 
    <property name="resource" value="#{jobParameters['filename']}"/> 
    <property name="lineMapper" ref="lineMapper"/> 
    <property name="comments" value="#"/> 
</bean> 

私のテストクラス:ここ

は私の構成です

@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,StepScopeTestExecutionListener.class}) 
@ContextConfiguration 
public class IpcFileReaderTest { 

@Autowired 
private ItemReader<Client> ipcFileReader; 

public StepExecution getStepExecution(){ 
    StepExecution execution = MetaDataInstanceFactory.createStepExecution(); 
    execution.getExecutionContext().putString("filename",System.getProperty("user.dir") + "/src/test/resources/OMC_File/OMC_Test_1.csv"); 
    return execution; 

@Test 
public void testReader() throws UnexpectedInputException, ParseException, NonTransientResourceException, Exception{ 
    Assert.assertNotNull(ipcFileReader.read()); 
} 
} 

しかし、私は常に、このエラーを得た:

Error creating bean with name 'lazyBindingProxy.lazyBindingProxy.ipcFileReader#execution#1234' defined in class path resource [applicationContext-Ipc.xml]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Cannot bind to placeholder: jobParameters['filename'] 

Thxを

+0

をあなたの春のバッチXMLは、ステップスコープ使用するための1つの変異体が含まれていますか? http://static.springsource.org/spring-batch/reference/html/configureStep.html#step-scope –

答えて

0

は実は、これは非常にマイナーなタイプミスが原因です。

#{jobParameters['filename']} 

は次のようになります。

#{jobParameters[filename]} 

単一引用符は必要ありません。私はJobParametersを渡すために、このunittestのを使用してい

+0

私のために働いていませんでした。 –

+0

エラーの原因となる別の問題がある可能性があります。上記が正しい構文であり、元の質問の問題に対処していることを考えると、私はあなた自身の問題で質問を投稿して、この解決された問題とは独立に対処できるようにすることをお勧めします。 –

+0

残念ながら、最近私がこの問題を解決したかどうか、どうやってどのように解決するのか、少し遅れています。とにかくありがとう。 –

0

package com.test; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.Map; 

import javax.sql.DataSource; 

import org.junit.After; 
import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.batch.core.BatchStatus; 
import org.springframework.batch.core.JobExecution; 
import org.springframework.batch.core.JobParameter; 
import org.springframework.batch.core.JobParameters; 
import org.springframework.batch.test.JobLauncherTestUtils; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 


@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { 
     "/data-source-context.xml", 
     "/env-test-context.xml", 
     "/hibernate-context.xml", 
     "/job-context.xml", 
     "/job-runner-test-context.xml" 
     }) 
public class CopyOfStep1Tests { 

    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 

    private SimpleJdbcTemplate simpleJdbcTemplate; 

    @Autowired 
    public void setDataSource(DataSource dataSource) { 
     this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); 
    } 

    @Before 
    public void onSetUp() throws Exception { 
     // delete previous batch 
     simpleJdbcTemplate.update("delete from LEGACY_FILE"); 
    } 

    @After 
    public void tearDown() throws Exception { 
     simpleJdbcTemplate.update("delete from LEGACY_FILE"); 
    } 

    @Test 
    public void testStep1() throws Exception { 

     Map<String, JobParameter> parameters = new HashMap<String, JobParameter>(); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
     Date date = sdf.parse("2011/10/20"); 
     JobParameter jobParameter = new JobParameter(date); 
     parameters.put("input.date", jobParameter); 
     parameters.put("timestamp", new JobParameter(new Date().getTime())); 
     JobParameters jobParameters = new JobParameters(parameters); 

     JobExecution jobExecution = jobLauncherTestUtils.launchStep("step1", jobParameters); 

     BatchStatus status = jobExecution.getStatus(); 
     Assert.assertEquals("COMPLETED", status.name()); 
    } 



} 
関連する問題