1

Flywayデータベース移行ツールには、プレースホルダーの置換機能が含まれています

プレースホルダーの目的は何ですか? プレースホルダーは、どのような実際の実用的なシナリオで役立つでしょうか? 有用性を示す簡単な例をいくつか説明していただけますか?

このドキュメント ページの下部にある例は、SQL でのプレースホルダーの使用を示しています。そのプレースホルダーの代わりに挿入される値をどのように設定しますか? プレースホルダーの値のソースは、環境変数、Java 変数、Java.propertiesファイル、またはその他として定義されていますか?

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

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

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

私はこの質問を見つけました.Flywayでプレースホルダーはどのように機能しますか? 、しかし、それは私に明確な全体像を与えません。

4

1 に答える 1

5

プレースホルダの置換は によって処理されPlaceholderReplacerます。

プレースホルダーの目的は何ですか? プレースホルダーは、どのような実際の実用的なシナリオで役立つでしょうか? 有用性を示す簡単な例をいくつか説明していただけますか?

私が単一のデータベースを使用する貧弱なスタートアップであり、テーブル プレフィックスを使用してdevtest、およびという名前の各環境を分離するとし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の検査では何も見つかりませんでした。

于 2017-05-30T03:10:52.547 に答える