DocRepository를 사용하는 테이블의 레코드와 DocFileDO로 레코드를 나타내는 객체를 (모든 형식으로) 테이블에 삽입하는 웹 서비스 DocGenerationServiceImpl이있다. for-loop에서 테이블에 생성 된 레코드의 ID를 얻을 수 있습니다. 각 레코드에 대해 실행 프로그램의 execute 메소드를 호출하여 DocGenTask가 주어진 id에 해당하는 레코드를 검색합니다. 그러나 예를 들어 3 가지 형식이 있으며 DocGenTask는 마지막 레코드 만 가져올 수 있습니다. 처음 2 개는 찾을 수 없습니다. hibernateTemplate을 사용하고 있지만. 제발 조언 해 줄 수 있니?HibernateTemplate이 TaskExecutor를 통해 호출 될 때 객체를 가져 오지 않는다.
@RestfulService
@Controller
@RequestMapping("/docs")
public class DocGenerationServiceImpl {
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private DocRepository docRepository;
@RequestMapping(value = "/generate", method = RequestMethod.POST)
@ResponseBody
public String generatedDocFile(DOCParam param) {
for(String format : param.getFormatList()) {
DocFileDO docFileDO = new DocFileDO();
...
docRepository.saveDocFile(docFileDO);
log.debug("docFileDO id = " + docFileDO.getId());
DocGenTask task = new DocGenTask(docFileDO.getId());
task.setDocRepository(docRepository);
taskExecutor.execute(task);
}
}
}
@Repository
public class DocRepository {
@Autowired
private HibernateTemplate hibernateTemplate;
public DocFileDO saveDocFile(DocFileDO docFile) {
hibernateTemplate.save(docFile);
hibernateTemplate.flush();
return docFile;
}
public DocFileDO getDocFile(Long docFileId) {
return hibernateTemplate.get(DocFileDO.class, docFileId);
}
}
public class DocGenTask implements Runnable {
public void run() {
generate();
}
private void generate() {
DocFileDO docFileObj = docRepository.getDocFile(docFileId);
}
}