2014-10-22 2 views
0

전체 메모리 내 db를 SQL 파일로 익스포트해야합니다. 예를 들어, 현재 in-mem db 상태의 전체 SQL 생성 문자열을 반환하거나 디스크의 어딘가에 저장하는 @Controller를 만드는 경우.스프링 부트 인 메모리 DB에서 SQL을 내 보냅니다.

구성 :

  • 봄 부팅 1.8
  • 스프링 데이터 JPA 1.7
  • 최대 절전 모드 4.3.6
  • 내가 방법을 찾기 위해 노력했습니다 2.3.2

HSQLDB 스키마 (schema)와 모든 행 (row) - 데이터를 내보내려면 -하지만 실패했습니다. http://java.dzone.com/articles/how-generate-schema-creation과 같은 기사에서 Ejb3Configuration은 최대 절전 모드에서 제거되므로 설명 된 방법이 작동하지 않습니다.

이렇게하는 좋은 방법이 있습니까?

답변

1

HSQLDB를 사용하면서 SCRIPT command을 사용할 수 있습니다. SCRIPT을 호출하면 데이터베이스 스키마가 들어있는 결과 집합이 반환됩니다. 경로로 파일을 전달할 수도 있으며 전체 데이터베이스를 해당 파일로 덤프합니다. 예 : SCRIPT '/path/to/dump.sql'. 스키마와 모든 행을 원할 때 후자를 사용해야합니다. 파일이 이미있는 경우 명령이 실패합니다.

스프링 부트를 사용하는 경우 SCRIPT 명령을 실행하는 가장 쉬운 방법은 JdbcTemplate을 사용하는 것입니다. 기본적으로 응용 프로그램에 DataSource이 있으면 JdbcTemplate 인스턴스가 응용 프로그램 컨텍스트에서 자동으로 사용 가능합니다. 데이터베이스의 덤프를 트리거

@Controller :

import java.io.File; 
import java.io.IOException; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

@Controller 
public class DumpDbController { 

    private final Object monitor = new Object(); 

    private final JdbcTemplate jdbcTemplate; 

    @Autowired 
    public DumpDbController(JdbcTemplate jdbcTemplate) { 
     this.jdbcTemplate = jdbcTemplate; 
    } 

    @RequestMapping("/dumpDb") 
    @ResponseBody 
    public void dumpDb() throws IOException { 
     synchronized (this.monitor) { 
      File dump = new File("dump.sql"); 
      if (dump.exists()) { 
       dump.delete(); 
      } 
      this.jdbcTemplate.execute("script '" + dump.getAbsolutePath() + "'"); 
     } 
    } 
} 

참고 동시에 데이터베이스를 덤프하지 않는 다중 스레드를 보장하기 위해 동기화의 사용.

0

liquibase을 살펴보십시오. 이 유틸리티에는 필요한 스크립트를 생성 할 수있는 메소드가 있지만이 API를 아카이브해야한다고 생각합니다.

이 유틸리티에는 통합 방법을 조사 할 수있는 command line 유틸리티가 있습니다. 또한 Integration tool with spring이 있지만 필요한 것은 아닙니다.

행운을 빈다.

+0

당신이 응용 프로그램 런타임에서 API를 사용하여 명령 줄 유틸리티처럼 sql 스크립트를 생성하여 라이브러리로 사용할 것을 제안합니다. – jmvivo

관련 문제