2012-08-31 1 views
0

많은 새 테이블을 사용하는 응용 프로그램의 새로운 기능을 개발할 때 개발 된 며칠 후까지는 테이블 정의가 안정적이지 않습니다. 이 불안정한 마이그레이션 파일을 같은 코드 기반의 버그 수정을 배포 할 때 프로덕션 박스에 적용하지 않고 소스 컨트롤에 체크인하고 싶습니다.플라이 웨이에있는 마이그레이션 파일을 개발자 컴퓨터에는 적용 할 수 있지만 프로덕션 박스에는 적용하지 않을 수 있습니까?

이동 경로에있는 마이그레이션 파일을 개발자 컴퓨터에는 적용 할 수 있지만 제작 상자에는 적용 할 방법이 없습니까?

저는 지형지 물을 좋아하지 않으므로 지형지 물을 피하려고합니다. 지형지 물을 피하기 위해 너무 많은 노력을 기울이고 있습니다.

답변

5

스프링 3.1을 사용하고 있기 때문에 스프링 프로파일을 사용하여 문제를 해결할 수 있었고 코드가있는 환경을 확인할 수있었습니다. 다음은 솔루션 작동 방식입니다. 생산 마이그레이션이 개발 마이그레이션이 어디로

  • dev.db.migrations가 어디로

    • db.migrations이다. 테이블이 1 시간 정도마다 변경 될 때 새로운 기능을 처음 개발하는 동안 마이그레이션 파일은 dev.db.migrations에 추가되고 소스 제어가 검사되며 개발자 컴퓨터에서 생성됩니다. 개발자는 일반적으로 테스트 데이터베이스를 날려 버리고 샘플 데이터로 다시 만듭니다. 따라서 파일을 소스 컨트롤로 체크인 할 것이기 때문에 개발자는 변경 사항에 대한 버전 번호를 얻을 수있는 기회를 개발자에게 부여합니다 (dev.db.migrations).

    아래는 내가 사용했던 스프링 프로파일 이동 경로 구성에 대한 XML입니다.

    <!-- =========================Configure Flyway ========================= --> 
    <bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate"> 
        <property name="dataSource" ref="dataSource"/> 
        <property name="locations" ref="flyway-migration-locations" /> 
    </bean> 
    
    <!-- ========================= Development Profile Configuration ========================= --> 
    <beans profile="development"> 
        <bean id="flyway-migration-locations" class="java.util.ArrayList"> 
         <constructor-arg> 
          <list> 
           <value>db.migration</value> 
           <value>dev.db.migration</value> 
          </list> 
         </constructor-arg> 
        </bean> 
    </beans> 
    
    <!-- ========================= Production Profile Configuration ========================= --> 
    <beans profile="production"> 
        <bean id="flyway-migration-locations" class="java.util.ArrayList"> 
         <constructor-arg> 
          <list> 
           <value>db.migration</value> 
          </list> 
         </constructor-arg> 
        </bean> 
    </beans>