2012-11-29 1 views
3

Eclipse 응용 프로그램의 두 가지 다른 프로젝트에서 이동 경로의 두 가지 인스턴스를 작성했습니다.Java 응용 프로그램에서 다른 데이터 소스를 가리키는 이동 경로 인스턴스가 여러 개 있습니다

이들은 서로 다른 데이터 소스/2 diff 데이터베이스를 가리키고 있으며 별도의 src.main.resources.db.migration 패키지가 있습니다. 각 패키지에는 해당 데이터베이스에 대한 서로 다른 sql 파일이 들어 있습니다.

응용 프로그램을 시작할 때 Flyway는 하나의 프로젝트 (프로젝트가 처음 초기화 된)의 스크립트를 식별하고이 프로젝트의 스크립트를 다른 DB에도 실행합니다.

Flyway가 2 개의 데이터베이스를 동시에 업데이트 할 수 있습니까?


답장을 보내 주셔서 감사합니다. 그러나 이것이 Java 코드에서 어떻게 구현 될 수 있는지 설명해 주시겠습니까? 예를 들어 : Curretnly 나는 다음과 같은 방법을 사용하고 있습니다 ...

  Flyway flyway = new Flyway();    
      InitialContext ictx = new InitialContext(); 
      DataSource dataSource = (DataSource) ictx.lookup("DS-name"); 
      flyway.setDataSource(dataSource); 
      flyway.setLocations("main.resources.db.migration");//location under first project 
       flyway.migrate(); 

       Flyway flywaygen = new Flyway; 

      InitialContext ictx = new InitialContext(); 
      DataSource dataSource = (DataSource) ictx.lookup("DS-name"); 
      flywaygen.setDataSource(dataSource); 
      flywaygen.setLocations("main.resources.emlogis.migration");//location      under second project 
       flywaygen.migrate(); 

문제는 flywaygen는 첫 번째 프로젝트 위치에서 찾고있다. 따라서 첫 번째 위치에 3 개의 SQL 스크립트가 추가되고 두 ​​번째 스크립트에 두 개의 스크립트가있는 경우 두 번째 이동 경로 인스턴스는 마이그레이션 3이 완료되었다고 말합니다. 따라서 flywaygen은 main.resources.emlogis.migration 대신 main.resources.db.migration을 가리키고 있습니다.

답변

1

두 번째 flyway bean을 정의하십시오. 그런 다음 두 플라이웨이 빈에 다른 SqlMigrationPrefix 속성을 추가하고 그에 따라 마이그레이션 스크립트 이름을 지정하십시오. 예를 들어

<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate"> 
    <property name="dataSource" ref="dataSource1" /> 
    <property name="sqlMigrationPrefix" value="DB1_" /> 
</bean> 
<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate"> 
    <property name="dataSource" ref="dataSource2" /> 
    <property name="sqlMigrationPrefix" value="DB2_" /> 
</bean> 

마이그레이션 스크립트는 이름 지정 방식에 따라 할 수있다 : - : 당신은 철새 이동 경로 두 가지가있는 코드에서

DB1_1.0__initial_setup.sql 
DB1_1.1__new_column.sql 

DB2_1.0__initial_setup.sql 
DB2_1.1__new_column.sql 

편집 코드로 구성 인스턴스. 이 인스턴스는 스프링 빈과 같은 정의입니다. 따라서 다음을 호출하여 같은 결과를 얻을 수 있습니다.

flyway.setSqlMigrationPrefix("DB1_"); 
flywaygen.setSqlMigrationPrefix("DB2_"); 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 그러나 이것이 Java 코드에서 어떻게 구현 될 수 있는지 설명해 주시겠습니까? 예를 들어 : curretnly 나는 다음과 같은 방법을 사용하고 있습니다 ... – user1862868

+0

하지만 어떻게 분리 된 위치를 지정할 수 있습니까? 현재 두 플라이 웨이 인스턴스가 같은 위치에 존재하기 때문에 flyway.setLocations ("main.resources.db.migration"); 그러나 두 가지 다른 프로젝트에서. 내 응용 프로그램이 flyway 만 시작하면 스크립트가 마이그레이션됩니다. 플라이 웨이 인스턴스는 아무 것도하지 않습니다. – user1862868

+0

'flyway.setLocation()'을 다른 패키지로 가리키면 어떨까요? 당신의'dataSource' 정의가 데이터베이스 1과 2를 가르키고 있습니까? 샘플 코드에서는 그렇지 않습니다. – Kai