春季批处理从侦听器类调用 DAO 类



我对Spring很陌生。 我正在使用Spring Batch来执行作业。我已经配置了所有内容,并且工作正常。但我有一个问题。从 xml 配置中,我正在调用 JobListener 类来更新批处理启动信息。

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

对不起,这种问题。金尔迪帮帮我。

<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> 

作业侦听器.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) {
    }
}   

试试这样。

在 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" />

最新更新