2017-03-06 7 views
0

다른 기능을 실행해야합니다 (도메인, JdbcTemplate을, MySQL은)은 내가 데이터베이스를 사용하는 스프링 부트 프로젝트가 각 데이터베이스

하지만 다른 프로젝트의 멤버 내 MySQL 데이터베이스를 연결할 수 없습니다.

는 그래서 우리가

을 개발하는 바로 그 때 다른 회원 임베디드 H2 데이터베이스 제공 스프링 부팅을 만들고 싶어하지만 난 작은 문제를 충족 mysql을의 SQL이며, H2 SQL은 다르다. 우리는 csv 데이터 가져 오기 SQL을 사용해야합니다.

MySQL의 : LOAD 데이터 ...... H2 : 테이블에 삽입하는 SELECT * FROM CSVREAD (csvfile)

우리는 MySQL과 H2에 대한 각각의 방법을 만들 경우, 우리는 우리가 배포 코드를 변경해야 .

이 문제를 해결하기위한 해결책은 무엇입니까?

감사합니다 :)

+1

을 사용하면 이러한 문제를 방지 할 수 있습니다. – rathna

+0

@ rathna 감사합니다. 내 프로젝트에 대한 정보를 찾았는데 내 프로젝트가 적합하지 않다고 결정했습니다. 이유는 첫째로 나는 1M 이상의 데이터를 많이 제어해야하고 ORM에 적합한 작업을 구현하지 않아야한다. create/drop table and load data .. 제게 조언을 부탁드립니다. :) – rura6502

답변

0

가 인터페이스를 구현하고 프로파일을 사용하여 구성 요소를 활성화 별도의 구성 요소로 데이터베이스에 특정 데이터 로딩을 구현합니다. 따라서 개발할 때 로컬에서는 "로컬"프로필로 앱을 실행할 것이라고 말합니다. 이런 식으로 뭔가 :

public interface SpecialDataLoader { 
    void loadData(); 
} 

@Component 
// no @Profile annotation, will be used by default 
public class MySqlDataLoader implements SpecialDataLoader { 
    @Override public void loadData() { 
    // .. do it LOAD DATA way 
    } 
} 

@Component 
@Profile("local") // component will be used when "local" profile is active 
public class H2DataLoader implements SpecialDataLoader { 
    @Override public void loadData() { 
    // .. do it INSERT INTO table SELECT * FROM CSVREAD(csvfile) way 
    } 
} 

@Component 
public ClassThatUsesTheLoader { 

    @Autowired SpecialDataLoader specialDataLoader; // the right component will be autowired depending on the profile here 

    void useSpecialDataLoader() { 
    specialDataLoader.loadData(); 
    } 
} 

이제 로컬 개발 당신이 명령 줄 매개 변수 --spring.profiles.active=local 사용하여 응용 프로그램을 실행할 수 있고, H2DataLoader가 사용됩니다 때. 프로덕션에서는 프로필을 지정하지 않아도되고 MySqlDataLoader이 사용됩니다.

프로파일에 relevant documentation과 사용 방법을. 읽어 보시기 바랍니다, 지속성 API를 최대 절전 모드와 같은