플라이웨이에서 직접 데이터베이스 변경을 호출하는 대신 SQL 마이 그 레이션을 SQL 파일로 출력 할 수 있습니까?SQL 파일로 플라이 웨이 출력
3
A
답변
0
나는 방법을 찾지 못했습니다. mybatis 마이그레이션으로 전환되었습니다. 꽤 멋지 네요.
0
대부분의 경우 이동 경로와 마찬가지로 DB 마이그레이션 자체는 이미 SQL로 작성됩니다.
1
네, 가능 합니다만,이 기능은 이동 경로를 허용하고 싶지 않은 DBA에게는 꼭 필요한 기능입니다.
가 여기에서 코드를 수정 함께 할 만든, 그것은 당신이 migrationDetails filewriter을 추가하고 밖으로 쓸 수, 이동 경로에 대한 건조 실행 명령의 :
https://github.com/killbill/killbill/commit/996a3d5fd096525689dced825eac7a95a8a7817e
내가 지금처럼 한을 ... 프로젝트 구조 (단지 killbill의 프로젝트에서 그것을 복사하여 이름이 패키지는 flywaydr하기 : Migrator.java에서
.
./main
./main/java
./main/java/com
./main/java/com/flywaydr
./main/java/com/flywaydr/CapturingMetaDataTable.java
./main/java/com/flywaydr/CapturingSqlMigrationExecutor.java
./main/java/com/flywaydr/DbMigrateWithDryRun.java
./main/java/com/flywaydr/MigrationInfoCallback.java
./main/java/com/flywaydr/Migrator.java
./main/java/org
./main/java/org/flywaydb
./main/java/org/flywaydb/core
./main/java/org/flywaydb/core/FlywayWithDryRun.java
가) DbMigrateWithDryRun.java에서을 (추가 콜백을 구현하고 넣어 :
,536,913를 내가 컴파일 언급private static void writeMasterScriptToFile(MigrationInfoImpl[] migrationDetails){
FileWriter fw = null;
try{
String masterScriptLoc="path/to/file";
fw = new FileWriter(masterScriptLoc);
LOG.info("Writing output to " + masterScriptLoc);
for (final MigrationInfoImpl migration : migrationDetails){
Path file =Paths.get(migration.getResolvedMigration().getPhysicalLocation());
//if you want to copy actual script files parsed by flyway
Files.copy(file, Paths.get(new StringBuilder(scriptspathloc).append(File.separator).append(file.getFileName().toString()).toString()), REPLACE_EXISTING);
}
//or just get the sql
for (final SqlStatement sqlStatement : sqlStatements) {
//sqlStatement.getSql();
}
fw.write(stuff.toString());
} catch(Exception e){
LOG.error("Could not write to file, io exception was thrown.",e);
} finally{
try{fw.close();}catch(Exception e){LOG.error("Could not close file writer.",e);}
}
}
마지막으로 한가지와 (받는다는 통해 (일명 fatjar) "종속성"항아리에 구글 조립 플러그인이 패키지 : 63,210
} else if ("dryRunMigrate".equals(operation)) {
MigrationInfoCallback mcb = new MigrationInfoCallback();
flyway.dryRunMigrate();
MigrationInfoImpl[] migrationDetails = mcb.getPendingMigrationDetails();
if(migrationDetails.length>0){
writeMasterScriptToFile(migrationDetails);
}
}
는 다음과 같은 파일에 물건을 쓰기 + jar with dependencies)를 실행하고 아래의 명령을 통해 실행하거나 의존성으로 포함시키고 mvn exec:exec
목표를 통해 호출 할 수 있습니다. 이는 내가 성공한 것도 있습니다.
$ java -jar /path/to/flywaydr-fatjar.jar dryRunMigrate -regular.flyway.configs -etc -etc
사용법에 대해 좀 더 알려주시겠습니까? 이것은 Java 마이그레이션에 필요한 것입니까? 또는 자리 표시자를 대체하여 입력 SQL을 가져 오시겠습니까? –
프로덕션 데이터베이스의 경우 jdbc를 통해 데이터베이스를 직접 업데이트 할 수는 없지만 일부 데이터베이스 팀에 스크립트를 전송한다고 가정합니다. – bertolami