2012-12-14 3 views
0

나는 Grails를 1.3.7을 실행하고 Grails의 데이터베이스 마이그레이션 플러그인 버전의 데이터베이스 마이그레이션 1.0Grails의 데이터베이스 마이그레이션 플러그인 - Java 힙 공간

내가 가진 문제는 내가 마이그레이션 변경 세트를 가지고있다을 사용하고 있습니다. 그것은 blob을 테이블에서 꺼내 디스크에 기록하는 것입니다. 힙 공간이 부족하지만이 마이그레이션을 실행할 때. 나는 공간을 비우기 위해 세션을 플러시하고 지울 필요가 있다고 생각했지만 마이그레이션 내에서 세션에 액세스하는 데 어려움을 겪고 있습니다. BTW는 마이그레이션에있어 그 이유는 우리가 오라클에 파일을 저장하고 내가 시도

디스크에 퍼팅에서 멀리 이동한다

SessionFactoryUtils.getSession(sessionFactory, true) 

또한

SecurityRequestHolder.request.getSession(false) //request in null -> not surprising 

changeSet(author: "userone", id: "saveFilesToDisk-1") { 
    grailsChange{ 
     change{ 
      def fileIds = sql.rows("""SELECT id FROM erp_file""") 
      for (row in fileIds) { 
       def erpFile = ErpFile.get(row.id) 
       erpFile.writeToDisk() 
       session.flush() 
       session.clear() 
       propertyInstanceMap.get().clear() 
      } 
      ConfigurationHolder.config.erp.ErpFile.persistenceMode = previousMode 
     } 
    } 
} 
을 시도

도움을 주시면 대단히 감사하겠습니다.

답변

1

마이그레이션시 응용 프로그램 컨텍스트가 자동으로 ctx으로 사용 가능합니다.

def session = ctx.sessionFactory.currentSession 
+0

고마워요. 다시 돌아가서 마이그레이션 플러그인 문서를 조금 더 자세히 읽었습니다. 나만의 davelt

0

세션에 액세스하려면 다음과 같이 withSession 폐쇄를 사용할 수 있습니다 : 당신은 같은 세션을 얻을 수 있습니다

Book.withSession { session -> 
    session.clear() 
} 

을하지만, 앱 힙 공간이 부족 이유는 이유가 될 수 없습니다 . 데이터 용량이 큰 경우에는

def fileIds = sql.rows("""SELECT id FROM erp_file""") 
    for (row in fileIds) { 
     .......... 
    } 

이 공간을 많이 차지합니다. 페이지 매김을 사용하여 데이터를 처리하십시오. 한 번에 모든 데이터를로드하지 마십시오.

관련 문제