2013-07-07 1 views
0

전개 후 초기화하려는 내장 데이터베이스 (HSQLDB)가있는 스프링 MVC 애플리케이션이 있습니다. JPA + Hibernate를 사용하고있는 동안 Java 코드를 사용하고자 할 때 xml 스크립트를 사용하여 데이터 소스의 초기 데이터를 정의 할 수 있다는 것을 알고 있습니다. 이것을 할 수있는 방법이 있습니까?배포 후 Spring 임베디드 데이터베이스 초기화

답변

1

심하게 업데이트 대답 (그 전에 너무 복잡) :

당신이 필요로하는 모든 데이터베이스에 필요한 모든 데이터를 삽입됩니다 문맥에 초기화 콩을 추가하는 것입니다

:

public class MockDataPopulator { 

    private static boolean populated = false; 

    @Autowired 
    private SessionFactory sessionFactory; 

    @PostConstruct 
    public void populateDatabase() { 
     // Prevent duplicate initialization as HSQL is also initialized only once. Duplicate executions 
     // can happen when the application context is reloaded - e.g. when running unit tests). 
     if (populated) { 
      return; 
     } 
     // Create new persistence session 
     Session session = sessionFactory.openSession(); 
     session.setFlushMode(FlushMode.ALWAYS); 
     // Insert mock entities 
     session.merge(MockDataFactory.createMyFirstObject()) 
     session.merge(MockDataFactory.createMySeconfObject()) 
     // ... 
     // Flush and close 
     session.flush(); 
     session.close(); 
     // Set initialization flag 
     populated = true; 
    } 

} 
+0

와우, 너무 많은 레코드를 추가 할 수 있습니다. 나는 Spring이 ServletContextListener와 비슷한 것을 가지고 있다고 생각했다. 어쨌든 큰 반향을 가져 주셔서 감사합니다. –

+0

음, 너무 많지 않습니다. 아마 너무 복잡 해 보였을거야. 필요한 것은 데이터를 초기화 할 하나의'InitializingBean' (또는'@ PostConstruct'로 bean)을 만드는 것뿐입니다. 우리는 우리의 애플리케이션에서 즉석에서 데이터베이스 스키마를 생성 중입니다 ... 그것은 위의 복잡성의 일부입니다. 어쩌면 나는 물건을 간단하게 유지하기 위해 내 대답을 다시 써야한다. –

+0

Ok ... 우리 응용 프로그램에서 복사하여 붙여 넣기 코드를 제거하고 가장 간단한 예제를 작성했습니다. 이전의 복잡한 엉망으로 미안 해요 :). –

관련 문제