プレースホルダの交換は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の検査で何も見つかりませんでした。