2017-05-30 5 views
1

Flywayデータベース移行ツールにはplaceholder replacementの機能が含まれています。フライウェイデータベース移行でのプレースホルダの目的

プレースホルダの目的は何ですか?実際のどのような現実的なシナリオでプレースホルダが有用なのでしょうか?有用性を実証するための簡単な例をいくつか記述できますか? this doc pageの下部に

例では、SQLのプレースホルダの使用を示します。そのプレースホルダの代わりに挿入する値はどのように設定しますか?プレースホルダの値のソースは環境変数、Java変数、Java .properties fileなどで定義されていますか?

プレースホルダはプレーンテキストのみを保持しますが、他のデータ型は保持しませんか?

プレースホルダはSQLファイルでのみ使用できますか?プレースホルダをJavaコード内のSQL文字列で使用できますか?

プレースホルダを使用できる場所は他にありますか?

私はHow do placeholders work in Flyway?、この質問を見つけたが、それは私に鮮明な画像を与えるものではありません。

答えて

4

プレースホルダの交換はPlaceholderReplacerで処理されます。

プレースホルダの目的は何ですか?実際のどのような現実的なシナリオでプレースホルダが有用なのでしょうか?有用性を実証するための簡単な例をいくつか記述できますか?

は、私は、単一のデータベースと起動不良だと仮定してdevという名前の各環境を分離するために、テーブルの接頭辞を使用し、test、およびprod。マイフライウェイ移行では、この変数にプレースホルダー${env}を選択することができました。今では、プレースホルダを使用し、実行時に値を指定することで、すべての環境で同じ移行を使用できます。

データベースに読み取り専用ユーザーとパスワードを作成する移行があるとします。スクリプトにパスワードを入れるのは悪い習慣なので、プレースホルダを使用すると、実行時にパスワードを渡すことができます。

プレースホルダの代わりに挿入する値はどのように設定しますか?

通過特性からプレースホルダの置換を解析するFlywayクラスのインスタンスにconfigure()を呼び出します。それはそうのようにそれをしない:あなたはCLIを使用している場合

 Map<String, String> placeholdersFromProps = new HashMap<String, String>(placeholders); 
     Iterator<Map.Entry<String, String>> iterator = props.entrySet().iterator(); 
     while (iterator.hasNext()) { 
      Map.Entry<String, String> entry = iterator.next(); 
      String propertyName = entry.getKey(); 

      if (propertyName.startsWith(PLACEHOLDERS_PROPERTY_PREFIX) 
        && propertyName.length() > PLACEHOLDERS_PROPERTY_PREFIX.length()) { 
       String placeholderName = propertyName.substring(PLACEHOLDERS_PROPERTY_PREFIX.length()); 
       String placeholderValue = entry.getValue(); 
       placeholdersFromProps.put(placeholderName, placeholderValue); 
       iterator.remove(); 
      } 
     } 
     setPlaceholders(placeholdersFromProps); 

、フライウェイを設定するためのガイドブックのためthe configuration section of the docsをチェックしてください。

プレースホルダはプレーンテキストのみを保持しますが、他のデータ型は保持しませんか?

のみ

文字列。 String placeholderValue = entry.getValue()

プレースホルダはSQLファイルでのみ使用できますか?プレースホルダをJavaコード内のSQL文字列で使用できますか?

はい、プレーンなSQLファイルです。私はPlaceholderReplacerへの参照を調べることでこれを知っていますが、Javaの移行にはSQLが含まれていない可能性もあり、何らかのコンパイラプラグインが必要です。さらに、Javaの移行では文字通り何かができるため、SQLスクリプトと同じプレースホルダを使用する場合は可能です。 Javaを書いてプロパティをロードし、文字列の置換を行います。地獄あなたがしたい場合でもPlaceholderReplacerを使用することができます。

プレースホルダを使用できる他の場所はありますか?

私はFlyway repoの検査で何も見つかりませんでした。

関連する問題