The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

Quarkusアプリケーションの再オーグメンテーション

オーグメンテーションとは?

Quarkusのアプリケーション設定には、2種類の設定オプションがあります。

  • ビルドタイムオプション:アプリケーションのビルド時に処理されます。

  • ランタイムオプション: アプリケーションがビルドされた後、起動する前に調整することができます。

オーグメンテーションとは、アプリケーションのビルドプロセスの段階で、アプリケーションのバイトコードがアプリケーションのビルド時の設定に応じて最適化されることです。 EAR ファイルが Jakarta EE サーバーにデプロイされるときに行われていた初期化ステップ (静的設定のパース、プロキシーインスタンスの作成など) が、オーグメンテーション時に行われるようになりました。 オーグメンテーション後に追加されたCDI Beanは (プロキシークラスがないため) 動作しません。また、オーグメンテーション後に変更されたビルド時のプロパティー (例: quarkus.datasource.db-kind) は無視されます。 ビルド時のプロパティーには、すべての設定オプションのリスト でロックアイコン () が付いています。 プロファイルやその他の方法でプロパティーをオーバーライドしても関係ありません。

再オーグメンテーションとは、オーグメンテーション出力を異なるビルド時の設定で再作成するプロセスです。

どのような場合に再オーグメンテーションが有効ですか?

再オーグメンテーションは、アプリケーションのユーザーがビルド時のプロパティーの一部を変更できるようにしたい場合に便利です。 たとえば、データベースドライバーの変更や、機能のオン/オフ (例: OpenTelemetry または Config Consul) などの場合に便利です。 ユーザー環境に依存するビルド時のプロパティーが 2 つか 3 つしかない場合は、アプリケーションの代替ビルドの提供を検討してもよいでしょう。しかし、そのようなプロパティーが多い場合は、代わりに変更可能な jar を配布し、ユーザーが自分の環境に合わせてアプリケーションを再調整できるようにする方が良いかもしれません。 パッケージタイプ mutable-jar では、ネイティブイメージを使用できない点に注意してください。 その結果と、他にどんな選択肢があるかを考えてみてください。

サーバーの起動に数分かかり、準備が整うまでコーヒーを楽しむことができた古き良き時代を懐かしむのでなければ、ランタイムに再オーグメンテーションを行うことは得策ではありません。

Quarkusのアプリケーションを再オーグメンテーションする方法

オーグメンテーションステップを実行するためには、使用される Quarkus エクステンションのデプロイメント JAR が必要です。 これらのJARは、 mutable-jar のディストリビューションにのみ含まれています。つまり、 quarkus.package.jar.type=mutable-jar でアプリケーションを構築する必要があります。 mutable-jar ディストリビューションは、 fast-jar ディストリビューションと同じですが、追加のフォルダー quarkus-app/lib/deployment には、 デプロイメント JAR とその依存関係 (および一部のクラスローダ設定) が含まれています。

デフォルトでは、ビルド時プロパティーがランタイムに変更された場合、警告が表示されます。 quarkus.config.build-time-mismatch-at-runtime=fail プロパティーを設定して、不一致があった場合にアプリケーションが起動しないようにすることもできます。 しかし、この記事を書いている時点では、ランタイムに quarkus.datasource.db-kind を変更しても、失敗することも警告が出ることもなく、静かに無視されました。
quarkus namespace でビルドツールによって提供されるビルド時の設定 (Maven pom.xmlproperties または Gradle の gradle.properties) は、 mutable-jar`ディストリビューションの一部として含まれます。 これには、シークレット情報やパスワードを参照する `quarkus の設定も含まれます。ビルドツールの設定ファイルには、 機密情報を含めないようにしてください。

1. mutable-jar として、アプリケーションを構築します。

mvn clean install -Dquarkus.package.jar.type=mutable-jar

2. ビルド時の設定を変えて、アプリケーションを再ビルドする

異なるビルド時のプロパティでQuarkusアプリケーションを再オーグメンテーションするには、目的の設定に加えて、 quarkus.launch.rebuild システムプロパティを true に設定してアプリケーションを起動します。

次の例では、 quarkus.datasource.db-kindmysql に変更しています。これを実行するには、 mysql-extension がビルドに含まれている必要があります。オーグメンテーションは、コンパイル時に存在していたエクステンションのみを使用することができます。

java -jar -Dquarkus.launch.rebuild=true -Dquarkus.datasource.db-kind=mysql target/quarkus-app/quarkus-run.jar
システムプロパティー、環境変数、プロファイル、外部の設定ファイルのどれを使っても構いません。現在の 設定がオーグメンテーションに使用されます (quarkus-app/quarkus の内容は、新しいオーグメンテーション出力に置き換えられます)。 上記のコマンドラインでは、アプリケーションは起動しません。アプリケーションが再オーグメンテーションされた後、Quarkus は直ちに終了します。

3. オプション: deployments フォルダの削除

ZIP配布やDockerイメージのスペースを節約するために、 quarkus-app/lib/deployment ディレクトリを削除しても構いません(不要なレイヤーを避けるために、多段階のDockerビルドを使用することを忘れないでください)。 deployment ディレクトリを削除すると、当然ながらアプリケーションの再オーグメンテーションはできなくなります。

関連コンテンツ