2017-09-19 4 views
2

Liquibase API로 변경 집합 그룹 만 실행할 수있는 방법이 있습니까?컨텍스트 이름으로 Liquibase 변경 사항을 실행하십시오.

: - 수단 test 컨텍스트 만 변경 집합을 실행

liquibase = new Liquibase(
    LIQUIBASE_CHANGELOG_PATH, 
    new FileSystemResourceAccessor(), 
    new JdbcConnection(embeddedTestDatabase.getConnection()) 
); 
liquibase.dropAll(); 
liquibase.update(""); // PROBLEM: for some reason this launch all changesets including changesets with name `test` 

지금 내가하고 DBUnit의 @DatabaseSetup 특정 시험 방법 전에 같은이 원하는 :

다음 코드는 통합 테스트 클래스 시작하기 전에 전체 스키마를 초기화

liquibase.update("test"); // PROBLEM : this also run all changesets 

<changeSet author="me" id="some_id" logicalFilePath="some_path" context="test"> 
    <sql> 
     INSERT INTO COMPANY (ID, CREATED_AT, CREATED_BY, NAME) VALUES (1, '2017-09-15 16:55:57.558', 'My company'); 
    </sql> 
    <rollback> 
     DELETE FROM COMPANY; 
    </rollback> 
</changeSet> 
+0

* 모든 * 다른 변경 집합 및이 * 다른 * 변경 집합을 실행합니까? 자체 컨텍스트가 있습니까? – Andremoniy

답변

3

예, 여기에 the "contexts" feature in Liquibase이 필요합니다.

문서에 제공된 예는 요구 사항과 일치합니다.

워드 프로세서는 설명 :

사용 가능한 방법 중 하나는, 당신이 실행하는 상황의 집합에 전달할 수 있습니다 불구하고 Migrator를 실행합니다. 전달 된 컨텍스트로 표시된 changeSets 만 실행됩니다.

컨텍스트를 changeSet에 지정하지 않으면 마이그레이션 프로그램에 전달한 컨텍스트에 관계없이 항상 실행됩니다.

나머지 마이그레이션에는 여기에서 실행하지 않으려면 "테스트"이외의 컨텍스트를 추가해야한다고 생각합니다. "main"일까요?

+0

예, 모든 오래된 변경 집합에는 컨텍스트가 없습니다. 우리가 이미 클라이언트를 지원한다면'context = "main"을 오래된 변경 집합으로 설정하는 것이 어떻습니까? context = "main"은 체크섬을 변경합니까? –

+2

예, 작동합니다. 컨텍스트를 추가하면 체크섬이 변경되지 않습니다. http://www.liquibase.org/2009/03/what-effects-changeset-checksums.html – Rich

+0

많이 들으십시오! –