2017-12-05 20 views
2

flyway 플러그인을 사용하여 데이터베이스 테이블을 만드는 Gradle 스크립트가 있는데 이제는 스크립트를 업데이트하여 2 개의 별도의 이동 경로 스크립트 세트로 작업 할 수 있도록했습니다. 별도의 데이터베이스를 갱신합니다. 스크립트의 단일 데이터베이스 버전에서여러 데이터베이스를 업데이트하기위한 Gradle flyway 스크립트

단순히 이렇게 :

task flywayMigrate2 << { 
    ext { 
     flyway { 
      url = 'jdbc:edb://localhost:5432/mydb2' 
      schemas = ['my_schema2'] 
      user = 'my_user2' 
      password = 'my_pass2' 
      locations = ['filesystem:src/main/resources/db/flyway/my_db2'] 
     } 
    }  
} 

flywayMigrate2.finalizedBy flywayMigrate 
: 나는 두 번째 DB의 스크립트를 실행하는 새 작업을 선언하는 실험을했습니다

flyway { 
    url = 'jdbc:edb://localhost:5432/mydb' 
    schemas = ['my_schema'] 
    user = 'my_user' 
    password = 'my_pass' 
    locations = ['filesystem:src/main/resources/db/flyway/my_db'] 
} 

내 Gradle 기술이 좋지 않지만 이것이 올바른 방법이 아니라는 것을 알고 있습니다. 제 이해는 ext 블록이 원래 비행 경로 구성을 덮어 씁니다. 따라서 flywayMigrateflywayMigrate2 이후에 실행하고 싶다면 seco 원래 세트로 되 돌리는 것보다 설정 값 세트를 사용하십시오.

나는 이것을 할 필요가있는 최초의 사람이 될 수는 없지만, 나는 괜찮은 접근 방식을 찾는데 어려움을 겪고있다.

답변

2

flyway { ... } 확장 개체는 모든 이동 경로 작업에 공통적 인 속성을 구성하는 것입니다. 각 작업에는 구성 할 수있는 속성이 있습니다. 내 생각에 작업 수준 속성은 flyway { ... } 확장 개체에 구성된 속성보다 우선합니다.

빌드에 두 개의 FlywayMigrateTask 인스턴스를 구성한다고 생각합니다.Gradle을

import org.flywaydb.gradle.task.* 

task migrate1(type: FlywayMigrateTask) { 
    url = 'jdbc:edb://localhost:5432/mydb1' 
    user = 'user1' 
    locations = ['filesystem:src/main/flyway/db1/migration'] 
    // etc 
} 

task migrate2(type: FlywayMigrateTask) { 
    url = 'jdbc:edb://localhost:5432/mydb2' 
    user = 'user2' 
    locations = ['filesystem:src/main/flyway/db2/migration'] 
    // etc 
} 

또한보십시오 AbstractFlywayTask.java

1

두 번째 이동 경로 구성을 도입하기 위해 다른 Gradle 작업을 정의해야한다고 생각하지 않습니다.

당신은 단순히 외부 이동 경로의 설정

gradle -Dflyway.configFiles=path/to/myAlternativeConfig.conf flywayMigrate 

이동 경로 Gradle을 플러그인을

gradle -Pflyway.user=myUsr -Pflyway.schemas=schema1,schema2 -Pflyway.placeholders.keyABC=valXYZ 

또는 시스템 특성

gradle -Dflyway.user=myUser -Dflyway.schemas=schema1,schema2 -Dflyway.placeholders.keyABC=valueXYZ 

Gradle을 속성을 사용하거나 제공하거나 덮어 쓸 수있는 documentation에 따르면, 다음 구성을 따른다.

  1. 시스템 속성
  2. 환경 변수
  3. 사용자 정의 설정 파일
  4. Gradle을 등록
  5. build.gradle에서
  6. 이동 경로 구성 섹션
  7. <user-home>/flyway.conf
  8. 이동 경로 Gradle을 플러그인 디폴트
  9. 을 주문 중 :

또는 Flyway의 Gradle 속성을 덮어 쓰는 새로운 작업을 도입 할 수 있습니다.

task migrate2(FlywayMigrateTask) { 

    project.ext['flyway.user']='myUsr' 
    project.ext['flyway.password']='mySecretPwd' 
    project.ext['flyway.schemas']='schema1,schema2,schema3' 
    project.ext['flyway.placeholders.keyABC']='valueXYZ' 
    project.ext['flyway.placeholders.otherplaceholder']='value123' 

} 
+0

덕분에, 나는 이동 경로 구성 값은 빌드 스크립트 안에 포함이 아닌 명령 행에 전달 될 필요가있다. 귀하의 project.ext 예제는 flywayMigrate2 작업과 동일한 작업을 수행하고 있다고 생각합니다. 즉 작업이 완료된 후에 전역 값을 덮어 씁니다. – codebox