从监听器类弹出批量调用DAO类

时间:2017-02-15 04:56:33

标签: java xml spring spring-batch

我是Spring的新手。我正在使用spring批处理来执行一项工作。我配置了一切,它工作正常。 但我有一个问题。从xml配置我调用JobListener类来更新批量启动信息。

从xml配置我能够调用JobListener并初始化datasoure和jobID。但我需要从JobListener类调用名为JobDAO的类来插入批处理状态。 是否有可能在xml中配置或我需要为JobDAO类创建对象并调用它。

对不起这类问题。 Kinldy帮帮我。

<batch:job id="txn-det" >
    <batch:step id="step1">
        // Item reader & Item writer
    </batch:step>
    <batch:listeners>
        <batch:listener ref="jobListener" />
    </batch:listeners>
</batch:job>         

<bean id="jobListener" class="com.JobListener" >
    <property name="dataSource" ref="dataSource"/>
    <property name="jobID" value="TXN01"/>
</bean> 

JobListener.java

public class JobListener implements JobExecutionListener {

    @Autowired
    DataSource dataSource;
    String jobID = null;

    @Autowired
    JobDAO jobDAO = null;

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

    public void setjobID(String jobID)  {
        this.jobID = jobID;
    }

    @Override
    public void beforeJob(JobExecution jobExecution) {
        startTime = new Date();
        System.out.println("Job starts at :"+startTime);
        // TODO Call DAO to insert Job status
        jobDAO.logJobStatus(); // Null pointer is throwing here 

    }

    @Override
    public void afterJob(JobExecution jobExecution) {
    }
}   

1 个答案:

答案 0 :(得分:0)

试试这样。

在JobListener.java

@Autowired
JobDAO jobDAO = null;

@Override
public void beforeJob(JobExecution jobExecution) {
    startTime = new Date();
    System.out.println("Job starts at :"+startTime);
    jobDAO.log()

}

来自XML配置:

<bean id="jobListener" class="com.JobListener" >
        <property name="dataSource" ref="dataSource"/>
        <property name="jobID" value="TXN01"/>
        <property name="jobDAO" ref="jobDAO" />
</bean> 

<bean id="jobDAO" class="com.JobDAO" />