我有一個DAO類來從Hibernate檢索一組數據。CustomItemReader從DAO檢索列表
<batch:step id="firstStep">
<batch:tasklet>
<batch:chunk reader="firstReader" writer="firstWriter"
processor="itemProcessor" commit-interval="2">
</batch:chunk>
</batch:tasklet>
</batch:step>
<bean id="firstReader" class="com.process.MyReader"
scope="step">
</bean>
在我的閱讀器裏面,我會打電話給DAO來讀取數據。
public class MyReader implements ItemReader<JobInstance>{
private List<JobInstance> jobList;
private String currentDate;
@Autowired
private JobDAO perDAO;
@BeforeRead
public void init() {
//jobList= perDAO.getPersonAJobList(currentDate);
}
@Override
public JobInstance read() throws Exception, UnexpectedInputException,
ParseException, NonTransientResourceException {
return !jobList.isEmpty() ? jobList.remove(0) : null;
}
@Value("#{jobParameters['currentDate']}")
public void setCurrentDate(String currentDate) {
this.currentDate = currentDate;
}
@Override
public void beforeStep(StepExecution stepExecution) {
// TODO Auto-generated method stub
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
// TODO Auto-generated method stub
return null;
}
}
當我運行的批處理作業,批處理作業一直在重複讀取和處理。
[org.springframework.batch.repeat.support.RepeatTemplate] [getNextResult] [372] - Repeat operation about to start at count=1
下面是我的DAO類
@Autowired
private QueryManager queryManager;
@Autowired
public JobDAO Impl(SessionFactory sessionFactory) {
super(sessionFactory, JobInstance.class);
}
public List<JobInstance> getPersonAJobList(String currentDate) {
String sql = queryManager.getNamedQuery("getJobList");
System.out.println("---------------------- " + sql + " " + currentDate);
SQLQuery query = this.getCurrentSession().createSQLQuery(sql);
query.setParameter("current_date", currentDate);
....
return result;
}
如果我把這個jobList = perDAO.getPersonAJobList(currentDate);在beforeStep方法裏面,我在這樣的線程錯誤中沒有session。 –
我幾乎可以肯定你沒有交易,因此沒有會話BeforeStep,使用BeforeRead有什麼問題? –
正如你所解釋的,dao將在每次閱讀時被調用,所以我打算在beforeStep中放置它,但是我在這種線程錯誤中觸發了沒有session。但是當我在BeforeRead中做到這一點時,我沒有遇到任何問題,只是會繼續循環。如何將transactionManager注入BeforeStep?我已經定義了事務和sessionfactory bean。 –