2017-02-15 3 views
1

나는 봄에 매우 익숙하다. 나는 작업을 실행하기 위해 스프링 배치를 사용하고있다. 나는 모든 것을 구성했으며 잘 작동합니다. 하지만 문제가 하나 있습니다. xml 구성에서 배치 시작 정보를 업데이트하기 위해 JobListener 클래스를 호출합니다.스프링 배치 호출 DAO 클래스 리스너 클래스에서

xml 구성에서 나는 JobListener를 호출하고 datasoure 및 jobID를 초기화 할 수 있습니다. 하지만 배치 상태를 삽입하려면 JobDAO라는 클래스를 JobListener 클래스에서 호출해야합니다. xml을 구성 할 수 있습니까 아니면 JobDAO 클래스의 개체를 만들고 호출해야합니다.

이런 종류의 질문에 사과드립니다. Kinldy가 나를 도와 줘.

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) { 
    } 
} 

답변

0

<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 그냥 다음과 같이하십시오. XML 구성에서 JobListener.java

@Autowired 
JobDAO jobDAO = null; 

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

} 

에서

:

<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" /> 
관련 문제