2017-11-02 3 views
-1

flywayのデフォルト設定であるmysqlデータベースの場合、flywayはINNODBを「schema_versionテーブル」を作成するためのデフォルトのストレージエンジンとして使用します。とにかくデフォルトのストレージエンジンをMyISAMに設定できるのですか?私はフライウェイの瓶を開き、コードベースから変更しようとしました。また、schema_versionテーブルを作成する.sqlファイルも見つかりました。しかし、そのファイルを変更し、再び瓶を梱包した後、私は飛行場を走らせることができませんでした。設定変更はありますか?そこから私はそれをパラメータとして変更することができます。 私はフライウェイ4.0.3のコミュニティバージョンを使用していますflywayのデフォルトのストレージエンジンを変更する方法

答えて

0

可能ならば、フライウェイのソースを変更することを避けることをお勧めします。

Flywayを作成した後でテーブルエンジンを変更することはできますか?これが不可能な場合は、Flywayを使用する前にschema_versionテーブルを作成し、ベースラインを効果的に偽ることができます。

0

私はまったく同じ問題を抱えていました。私の顧客はInnoDBエンジンを無効にしました。フライウェイはエンジンをカスタマイズすることはできません。これは、ハードコードされ:

Code on GitHub

だから私は自分でこのステップを実行する必要がありました。それほど仕事ではありません:

private static void baselineWithDefaultStorageEngine(Flyway flyway) { 
    try (Connection con = flyway.getDataSource().getConnection()) { 
     if (!versionTableExisting(con, flyway)) { 
      createVersionTable(con); 
      setBaseline(con); 
     } 
    } catch (SQLException e) { 
     throw new RuntimeException("Konnte Flyway Baseline für " + flyway.getDataSource() + " nicht erstellen.", e); 
    } 
} 

private static void createVersionTable(Connection con) throws SQLException { 
    try(PreparedStatement stmt = con.prepareStatement("CREATE TABLE flyway_schema_history (" + 
     "`installed_rank` INT NOT NULL, " + 
     "`version` VARCHAR(50), " + 
     "`description` VARCHAR(200) NOT NULL, " + 
     "`type` VARCHAR(20) NOT NULL, " + 
     "`script` VARCHAR(1000) NOT NULL, " + 
     "`checksum` INT, " + 
     "`installed_by` VARCHAR(100) NOT NULL, " + 
     "`installed_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + 
     "`execution_time` INT NOT NULL, " + 
     "`success` BOOL NOT NULL, " + 
     "CONSTRAINT `flyway_schema_history_pk` PRIMARY KEY (`installed_rank`), " + 
     "INDEX `flyway_schema_history_s_idx` (`success`) " + 
     ");")) {   
     stmt.execute(); 
    } 

} 

private static void setBaseline(Connection con) throws SQLException { 
    try (PreparedStatement stmt = con.prepareStatement("INSERT INTO `flyway_schema_history` " + 
    "(`installed_rank`, `version`, `description`, `type`, `script`, `installed_by`, `execution_time`, `success`) VALUES " + 
    "(?, ?, ?, ?, ?, ?, ?, ?)")) { 
     stmt.setInt(1, 1); 
     stmt.setInt(2, 1); 
     stmt.setString(3, "<< Flyway Baseline >>"); 
     stmt.setString(4, "BASELINE"); 
     stmt.setString(5, "<< Flyway Baseline >>"); 
     stmt.setString(6, "root"); 
     stmt.setInt(7, 0); 
     stmt.setInt(8, 1); 
     stmt.execute(); 
    } 

} 

private static boolean versionTableExisting(Connection con, Flyway flyway) throws SQLException { 
    try (PreparedStatement stmt = con.prepareStatement("show tables like 'flyway_schema_history'")) { 
     try (ResultSet resultSet = stmt.executeQuery()) { 
      return resultSet.next(); 
     } 
    } 
} 
関連する問題