我有一個批處理過程,它可以逐個保存1000000條記錄。每個記錄都有它自己的子表。我使用Spring 2.5.6,Hibernate和JPA來做到這一點。但是一小時後它就會失去記憶。任何人都可以建議我在應用程序中出現什麼問題?批處理在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實現,它使用的是Spring到數據庫服務層注入的上方。請提出一些建議。
詹姆斯DW的回答下面是非常對你的問題。然而,我的reccomandation是爲了批處理作業休眠(或任何其他ORM),即使你解決了你的內存問題,你仍然會遇到其他問題。只需使用JDBC。 –