Re-augment a Quarkus Application
オーグメンテーションとは?
Quarkusのアプリケーション設定には、2種類の設定オプションがあります。
-
ビルドタイムオプション:アプリケーションのビルド時に処理されます。
-
ランタイムオプション: アプリケーションがビルドされた後、起動する前に調整することができます。
オーグメンテーションとは、アプリケーションのビルドプロセスの段階で、アプリケーションのバイトコードがアプリケーションのビルド時の設定に応じて最適化されることです。EARファイルがJakarta EEサーバーにデプロイされるときに行われていた初期化ステップ(静的設定のパース、プロキシ・インスタンスの作成など)が、オーグメンテーション時に行われるようになりました。オーグメンテーション後に追加されたCDI Beanは(プロキシクラスがないため)動作しませんし、オーグメンテーション後に変更されたビルド時のプロパティ(例: quarkus.datasource.db-kind )は無視されます。ビルド時のプロパティは、 すべての設定オプションのリストでロックアイコン () が付いています。プロファイルやその他の方法でプロパティを上書きしても関係ありません。オーグメンテーション時に有効だったビルド時のプロパティは、ビルドに焼き付けられます。
再オーグメンテーションとは、オーグメンテーション出力を異なるビルド時の設定で再作成するプロセスです。
どのような場合に再オーグメンテーションが有効ですか?
再オーグメンテーションは、アプリケーションのユーザーがビルド時のプロパティの一部を変更できるようにしたい場合に便利です。例えば、データベースドライバの変更や、機能のオン/オフ(例: opentracingや consul-config)などです。ユーザー環境に依存するビルド時のプロパティが2つか3つしかない場合は、アプリケーションの代替ビルドの提供を検討してもよいでしょう。しかし、プロパティが多い場合には、代わりに変更可能なjarを出荷し、ユーザーが自分の環境に合わせてアプリケーションを再オーグメンテーションすることを好むかもしれません。なお、パッケージタイプ mutable-jar では、ネイティブイメージを使用することはできません。その結果と、他にどんな選択肢があるかを考えてみてください。
サーバーの起動に数分かかり、準備が整うまでコーヒーを楽しむことができた古き良き時代を懐かしむのでなければ、実行時に再オーグメンテーションを行うのは得策ではありません。
Quarkusのアプリケーションを再オーグメンテーションする方法
オーグメンテーションステップを実行するためには、使用されるQuarkusエクステンションのデプロイメントJARが必要です。これらのJARは、 mutable-jar のディストリビューションにのみ含まれています。つまり、 quarkus.package.type=mutable-jar でアプリケーションを構築する必要があります。 mutable-jar ディストリビューションは、 fast-jar ディストリビューションと同じですが、追加のフォルダ quarkus-app/lib/deployment には、デプロイメントJARとその依存関係(およびクラスローダの設定)が含まれています。
By default, you’ll get a warning if a build time property has been changed at runtime.
You may set the quarkus.configuration.build-time-mismatch-at-runtime=fail property to make sure your application does not start up if there is a mismatch.
However, as of this writing changing quarkus.datasource.db-kind at runtime did neither fail nor produce a warning but was silently ignored.
|
2. ビルド時の設定を変えて、アプリケーションを再ビルドする
異なるビルド時のプロパティでQuarkusアプリケーションを再オーグメンテーションするには、目的の設定に加えて、 quarkus.launch.rebuild システムプロパティを true に設定してアプリケーションを起動します。
次の例では、 quarkus.datasource.db-kind を mysql に変更しています。これを実行するには、 mysql-extension がビルドに含まれている必要があります。オーグメンテーションは、コンパイル時に存在していたエクステンションのみを使用することができます。
java -jar -Dquarkus.launch.rebuild=true -Dquarkus.datasource.db-kind=mysql target/quarkus-app/quarkus-run.jar
It does not matter if you use system properties, environment variables, profiles, or an external config file. The current
configuration will be used for augmentation (the content of quarkus-app/quarkus will be replaced with the new augmentation output).
The command line above will not launch the application. Quarkus will exit immediately after the application has been re-augmented.
|