The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

How dev mode differs from a production application

This document explains how the dev mode in Quarkus differs from a production application.

イントロ

Quarkus provides a dev mode (explained in more detail here and here) which greatly aids during development but should NEVER be used in production.

アーキテクチャの差異

Feature sets aside, the Quarkus application that is run under dev mode differs architecturally from the production application (i.e. the one that is run using java -jar …​).

In dev mode, Quarkus uses a ClassLoader hierarchy (explained in detail here) that enables the live reload of user code without requiring a rebuild and restart of the application.

本番アプリケーションでは、前述のクラスローディングのインフラは全く存在しません。目的に応じて構築された単一のClassLoaderがあり、(ほぼ)すべてのクラスと依存関係をロードします。

開発モードの機能

In keeping with the mantra of providing developer joy, Quarkus provides a host of features when dev mode is enabled. The most important features are:

ライブ・リロード

この非常に重要な機能については紹介するまでもなく、 アーキテクチャの差異の項ですでに触れています。

Dev UI

Quarkusは、 /q/dev でブラウザからアクセスできる非常に便利な UIを提供しています 。このUIにより、開発者はアプリケーションの状態を確認できるだけでなく、(存在するエクステンションに応じて)その状態を変更できる様々な操作にアクセスできます。そのような操作の例は以下の通りです:

  • 設定値の変更

  • データベース移行スクリプトの実行

  • キャッシュの消去

  • スケジュールされたオペレーションの実行

  • コンテナのビルド

エラーページ

In an effort to make development errors very easy to diagnose, Quarkus provides various detailed error pages when running in dev mode.

データベースインポートスクリプト

The quarkus-hibernate-orm extension will run the import.sql script in src/main/resources when Quarkus is running in dev mode. More details can be found here.

Dev Services

When testing or running in dev mode Quarkus can even provide you with a zero config database out of the box, a feature we refer to as Dev Services. More information can be found here.

Swagger UI

The quarkus-smallrye-openapi extension will expose the Swagger UI when Quarkus is running in dev mode. Additional information can be found here.

GraphQL UI

The quarkus-smallrye-graphql extension will expose the GraphiQL UI when Quarkus is running in dev mode. More details can be found here.

Health UI

The quarkus-smallrye-health extension will expose the Health UI when Quarkus is running in dev mode. This section provides additional information.

Mock mailer

The quarkus-mailer extension will enable an in-memory mock mail server when Quarkus is running in dev mode. See this for more details.

gRPC

  • gRPC Reflection Serviceは、開発モードではデフォルトで有効になっています。これにより、 grpcurl のようなツールを使用することができます。本番モードでは、リフレクションサービスは無効になっています。 quarkus.grpc-server.enable-reflection-service=true を使って明示的に有効にすることができます。

  • In dev mode, quarkus.grpc.server.instances has no effect.

その他

There might be other configuration properties (depending on the extensions added to the application) that have no effect in dev mode.

パフォーマンスへの影響

In dev mode, minimizing the runtime footprint of the application is not the primary objective (although Quarkus still starts plenty fast and consumes little memory) - the primary objective is enabling developer joy. Therefore, many more classes are loaded and build time operations also take place every time a live-reload is performed.

対照的に、プロダクションアプリケーションでは、Quarkusの主な目的は、最小のメモリを消費し、最小の時間で起動することです。したがって、本番アプリケーションを実行する際には、ビルド時の操作は(定義上)実行されず、ビルド時に必要なさまざまなインフラストラクチャクラスは、実行時にはまったく存在しません。さらに、 fast-jarパッケージタイプに付属する目的に応じて構築されたClassLoaderにより、クラスの検索が可能な限り高速に行われると同時に、メモリ内のjarの量も最小限に抑えられます。

セキュリティへの影響

Perhaps the most important reason why dev mode applications should not be run in production is that the dev mode allows reading information that could be confidential (via the Dev-UI) while also giving access to operations that could be destructive (either by exposing endpoints that should not be available in production application or via the Dev-UI).

ネイティブ実行可能ファイル

ネイティブ実行可能ファイルを作成する場合(詳しくは こちら)、 常に 本番アプリケーションからビルドされます。