2016-10-19 4 views
2

변경되지 않는 끝에 반복 스크립트가있는 프로세스가 있습니다. 따라서 체크섬은 변경되지 않습니다. Flyway에게 이전에 실행 여부와 관계없이 실행하도록 지시하는 방법이 있습니까? 강제로 다시 실행하십시오.이동 경로 - 반복 실행 스크립트 강제 실행

현재 프로그램이 실행되도록 고유 한 주석을 사용하여 프로그래밍 방식으로 파일을 변경하고 있습니다. 그러나 스크립트가 Jar 파일 안에있을 때 까다로워 질 수 있습니다.

답변

4

대신 스크립트를 콜백으로 실행해야 원하는 소리를 낼 수 있습니다.

+2

이 질문에 대한 답변은 [콜백 문서] (https://flywaydb.org/documentation/callbacks)에서 확인하십시오. – markdsievers

+0

감사합니다. 어리석게도 연결에서 보지 못한 문서의 콜백 섹션을 무시했습니다. 설명서에 콜백 접미사가있는 스크립트가 실행되지만 콜백으로 정확하게 명명 된 스크립트 만 실행되는 것으로 나타났습니다. 이 버그입니까 아니면 오해 했습니까? 또한, schema_version 테이블에 기록 된 위치가 현재 실행 된 레코드가 아닌 경우 매우 유용하다고 생각합니다. – Stephen

+0

@Stephen 감사 추적을 유지하려는 경우 아래 대안 솔루션이 있습니다. – markdsievers

1

Axels 대답은 올바른 올바른 것입니다.

실행 기록을 schema_version에 보관하는 것과 같은 추가 요구 사항이있는 경우 random checksum과 함께 Java Migrations에 실행을 감쌀 수 있습니다.

public class R__MyRepeatable implements JdbcMigration, MigrationChecksumProvider { 

    @Override 
    public final void migrate(Connection connection) throws Exception { 
     String scriptLocation = "path/to/maintenance_script.sql"; 
     try (InputStream in = getClass().getResourceAsStream(scriptLocation)) { 

      if (in == null) { 
       throw new IllegalStateException("Cannot find file: " + scriptLocation); 
      } 

      String sql = IOUtils.toString(in, "UTF-8"); 

      connection.prepareStatement(sql).execute(); 
     } 
    } 

    @Override 
    public Integer getChecksum() { 
     return ...; // Whatever random/timebased scheme you want. 
    } 
} 
+0

안녕하세요, 작동하는 것 같습니다. 우선 순위가 계속 변경됨에 따라 아직 시도하지 않았습니다. 다른 마이그레이션으로 실행되는 것을 중지하려면 반복 가능한 스크립트를 자체 폴더로 이동해야합니다 (처음). 또한 폴더 당보다는 반복 가능한 스크립트마다이 중 하나가 필요합니다. 건배! – Stephen