2013-10-02 2 views
0

내 응용 프로그램의 런타임 중에 hbm2ddl 기능의 값을 알고 싶습니다.스키마 업데이트를 트리거하지 않고 프로그래밍 방식으로 hbm2ddl 값 확인

@Autowired 
private ApplicationContext applicationContext; 

private getHbm2DdlValue() { 
    LocalSessionFactoryBean sessionFactoryBean = (LocalSessionFactoryBean) 
      applicationContext.getBean("&sessionFactory"); 
    Configuration conf = sessionFactoryBean.getConfiguration(); 
    String hbm2ddlValue = conf.getProperty("hibernate.hbm2ddl.auto"); 
    return hbm2ddlValue; 
} 

지금, 나는 자동 업데이트가 트리거 전에 그 값 을 알고 싶어 : 나는 다음과 같은 코드를 사용하여 그 값을 결정하는 데 성공했다. 위의 솔루션의 문제점은 LocalSessionFactoryBean을 검색하면 즉시 자동 업데이트가 트리거된다는 것입니다.

디스크에서 구성 파일을 읽고 해석 할 수 있습니다. 그러나 구성을 최대 절전 모드로 빌드 한 다음 거기에서 속성을 읽는 것이 좋습니다.

자동 스키마 업데이트를 트리거하지 않고 최대 절전 모드 구성을 만들거나 액세스하는 다른 방법이 있습니까?

답변

0

내가 아는 한 ApplicationContext 로딩 중 공장 초기화를 비활성화 할 수 없습니다. LocalSessionFactoryBeanFactoryBean입니다. Spring은 컨텍스트의 초기화 중에 해당 객체의 getObject() 메서드를 호출 할 것이므로 스키마가 강제 업데이트됩니다.

LocalSessionFactoryBeanConfiguration 인스턴스는 afterPropertiesSet() 메서드에서 직접 구성되어 사용됩니다. 당신도 그것을 가로 챌 수 없습니다.

ApplicationContext을 생성하기 전에 자신 만의 Configuration 인스턴스를 생성하거나 파일을 직접 구문 분석해야합니다. 소스 코드 LocalSessionFactoryBean에서 어떻게 수행되는지 볼 수 있습니다.