JobParameter & ItemReader - PullRequest
       4

JobParameter & ItemReader

1 голос
/ 22 июня 2011

Я пытаюсь получить доступ к JobParameters в itemReader, я следовал «Поздней привязке заданий и атрибутов шага» в весеннем руководстве пользователя, но не могу заставить его работать.

Вот моя конфигурация: Пружина 2.1.8 Пружинный сердечник 3.0.5

 <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

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

Я использую этот UnitTest для передачи JobParameters:

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());
    }



}
0 голосов
/ 01 сентября 2011

На самом деле это из-за очень незначительной опечатки.

#{jobParameters['filename']}

должно быть:

#{jobParameters[filename]}

Одиночные кавычки не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...