永远不会调用Tasklet的execute()

时间:2014-10-14 16:12:04

标签: spring spring-batch

我有一个简单的工作,在使用JUnit的集成测试中进行测试。我在我的作业上下文中定义了一个tasklet,并将其集成到Spring Batch作业bean中。但是,从未调用此tasklet的execute()方法,我不知道为什么。你知道为什么会这样吗?

我的工作环境:

<beans 
 xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:batch="http://www.springframework.org/schema/batch"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

<import resource="classpath*:/launch-context-test.xml" />

<batch:job id="testJob">
    <batch:step id="testStep">
        <batch:tasklet ref="myTasklet" />
    </batch:step>
</batch:job>

<bean id="myTasklet" class="de.something.MyTasklet" scope="step" />

<bean id="jobLauncherTestUtils" class="org.springframework.batch.test.JobLauncherTestUtils" />

tasklet的实现方式如下:

public class MyTasklet implements Tasklet {

public MyTasklet() {
    System.out.println("Tasklet initialized.");
}

@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {

    System.out.println("Execute Tasklet.");

    return RepeatStatus.FINISHED;
}

这是我的测试课程:

@ContextConfiguration
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, 
    StepScopeTestExecutionListener.class, JobScopeTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest {

@Resource
private JobLauncherTestUtils jobLauncherUtils;

@Test
public void test1() throws Exception {

    JobParameters params = new JobParametersBuilder(jobLauncherUtils.getUniqueJobParameters()).toJobParameters();
    jobLauncherUtils.launchJob(params);
}

当我使用JUnit执行我的test1时,它只打印“Tasklet initialized”。到控制台。

1 个答案:

答案 0 :(得分:2)

需要告诉JobLauncherTestUtils要运行什么工作。您需要在配置中将作业注入其中,如下所示:

<bean id="jobLauncherTestUtils" class="org.springframework.batch.test.JobLauncherTestUtils">
    <property name="job" ref="testJob"/>
</bean>