하나씩 1000000 개의 레코드가있는 배치 프로세스가 있습니다. 각 레코드에는 자체 자식 테이블이 있습니다. Spring 2.5.6, Hibernate, JPA를 사용하고있다. 그러나 1 시간 후에 그것은 기억을 잃게됩니다. 아무도 내 응용 프로그램에서 무엇이 잘못 될 수 있다고 제안 할 수 있습니까?Spring + Hibernate + JPA에서 일괄 처리 프로세스가 메모리 부족 상태가 됨
Public void processFeeds(List<Objects> feeds){
for(Feed feed : feeds){
Feed feed=getDAOMainFeedService().persist(feed);
//Saving the child information
if(feed.getID()>0) {
for(Address address : feeds.getAddress()){
getDAOAddressService().persist(feed.getID,address);
}
for(PersonalInfo pi: feeds.getPersonalInfo){
getDAOPIService().persist(feed.getID,pi);
}
}
}
}
//service Class code:
public class MainFeedServiceDAOImpl extends JpaDaoSupport implements IVehYmmRevDAO
public Feed persist(Feed feed)
{
try
{
getJpaTemplate().persist(feed);
feed=getJpaTemplate().merge(feed);
getJpaTemplate().flush();
return feed;
}
catch (Exception exception)
{
logger.error("Persit failed",
exception);
throw new DatabaseServiceException(
"Persit failed", exception);
}
}
}
다른 DAO 클래스는 또한 상기 데이터베이스 서비스 층으로의 스프링을 사용하여 주입되고, 동일한 MainFeedServiceDAOImpl 구현을 가지고 : 여기서
코드이다. 몇 가지 제안을하십시오.
James DW 님의 답변은 아래 사항에 매우 중요합니다. 내 reccomandation하지만 일괄 작업에 대한 최대 절전 모드 (또는 다른 ORM) 도랑 것입니다, 당신의 메모리 문제를 해결하더라도, 당신은 여전히 다른 사람과 충돌거야. JDBC 만 사용하십시오. –