プレースホルダの置換は によって処理されPlaceholderReplacer
ます。
プレースホルダーの目的は何ですか? プレースホルダーは、どのような実際の実用的なシナリオで役立つでしょうか? 有用性を示す簡単な例をいくつか説明していただけますか?
私が単一のデータベースを使用する貧弱なスタートアップであり、テーブル プレフィックスを使用してdev
、test
、およびという名前の各環境を分離するとしprod
ます。Flyway の移行では${env}
、この変数のプレースホルダーを選択できました。これで、プレースホルダーを使用し、実行時に値を指定して、すべての環境で同じ移行を使用できるようになりました。
データベースに読み取り専用のユーザーとパスワードを作成する移行があるとします。スクリプトにパスワードを入れるのは悪い習慣なので、プレースホルダーを使用して実行時にパスワードを渡すことができます。
そのプレースホルダーの代わりに挿入される値をどのように設定しますか?
configure()
クラスのインスタンスを呼び出すとFlyway
、渡されたプロパティからプレースホルダーの置換が解析されます。それは次のようにします:
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);
CLI を使用している場合は、Flyway の構成ガイドについてドキュメントの構成セクションを確認してください。
プレースホルダーはプレーンテキストのみを保持し、他のデータ型は保持しませんか?
文字列のみ。String placeholderValue = entry.getValue()
プレースホルダーは SQL ファイルでのみ使用できますか? Javaコード内のSQL文字列でプレースホルダを使用できますか?
はい、プレーンな SQL ファイルのみです。への参照を調べることでこれを知ってPlaceholderReplacer
いますが、Java の移行には SQL が含まれていない可能性があり、動作させるにはある種のコンパイラ プラグインが必要になるため、これも理にかなっています。その上、Java マイグレーションは文字通り何でもできるので、SQL スクリプトと同じプレースホルダーを使用したい場合は可能です。Java を記述してプロパティをロードし、文字列の置換を行うだけです。必要に応じて使用することもできPlaceholderReplacer
ます。
プレースホルダーを使用できる他の場所はありますか?
Flyway repoの検査では何も見つかりませんでした。