ホームページ Java &#&チュートリアル 自動セットアップとQuarkus開発サービスとの統合を利用して効率的な開発を実現

自動セットアップとQuarkus開発サービスとの統合を利用して効率的な開発を実現

Sep 03, 2024 pm 01:11 PM

JPrime 2024 は無事終了しました!!

JPrime 2024 の主催者は、あらゆる人に何かを提供できるように、再び幅広いトピックを提供するために多大な労力を費やしました。

しかし、今日の記事は、非常に洞察力に富んだものでしたが、「Spring と Quarkus における統合テストの進化」 に関する Michael Simons の講義の 1 つによって引き起こされたものではありません。彼は、Spring Boot のセットアップに焦点を当てて、統合テスト戦略を検討しました。

著者は、自分が強調した問題は開発サービスの利用を通じて Quarkus で効果的に対処されることを明確に強調しました (図 1)。これは、私が特定のアプリケーションに対して Spring Boot に懐疑的な見方をするもう 1 つの理由を浮き彫りにします。その複雑さは、Quarkus の合理化されたソリューション、特に Dev Services の使用とは明らかに対照的です。

Harnessing Automatic Setup and Integration with Quarkus Dev Services for Efficient Development

図 1 – JPrime 2024

新しい参加者の間で Dev Services の驚きが巻き起こったのを目撃するのは驚くべきことでした。ただし、Dev Services は Quarkus の最近の機能ではないことに注意することが重要です。これはかなり長い間フレームワークに不可欠な部分でした。 Quarkus Dev Services をさらに深く掘り下げ、その永続的なメリットを探ってみましょう。

Quarkus開発サービス

Quarkus では、Dev Services により、開発モードとテスト モードの両方で未構成のサービスの自動プロビジョニングが容易になります。基本的に、拡張機能を設定せずに組み込むと、Quarkus は関連するサービスを自動的に開始し (多くの場合、バックグラウンドで Testcontainers を利用します)、このサービスを効率的に使用するようにアプリケーションを設定します。

  1. サービスの自動検出と起動

    Quarkus Dev Services は、データベース、メッセージ ブローカー、その他のバックエンド サービスなどの必要なサービスの検出と起動を自動化します。この関数は、pom.xml または build.gradle で指定されたアプリケーションの依存関係を利用します。たとえば、データベース ドライバーを追加すると、Dev Services が自動的にトリガーされ、そのデータベースの対応するコンテナー化されたインスタンスがまだ実行されていない場合にはスピンアップされます。ここで使用されるテクノロジには主に Testcontainers が含まれます。これにより、一般的なデータベース、Selenium Web ブラウザ、または Docker コンテナ内で実行できるその他の軽量の使い捨てインスタンスを作成できます。

  2. 動的構成の挿入

    必要なサービスがインスタンス化されると、Quarkus Dev Services は関連するサービス接続の詳細を実行時にアプリケーションの設定に動的に挿入します。これは、標準データベースまたは他のサービス URL を自動プロビジョニングされたテストコンテナに再ルーティングする継続的テストと呼ばれる機能を使用して、手動介入なしで実行されます。 URL、ユーザー認証情報、その他の操作パラメータなどの構成プロパティがシームレスに設定されるため、アプリケーションは手動で構成されたかのようにこれらのサービスと対話できるようになります。

  3. サービス固有の動作

    Dev Services は、さまざまなタイプのサービスに合わせて調整されています。

    • データベース: PostgreSQL、MySQL、MongoDB、またはその他のサポートされているデータベースであっても、アプリケーションのニーズに合わせた実行データベースを自動的に提供します。 Dev Services は、対応する Testcontainer が開発中に確実に利用できるようにします。
    • メッセージング システム: Kafka や AMQP などのメッセージング システムを使用するアプリケーションの場合、Quarkus Dev Services は Docker を使用して必要なブローカーを起動し、それらをアプリケーションに接続します。
    • カスタム Dev Services: 開発者は、Dev Services フレームワークを活用するカスタム Quarkus 拡張機能を作成することで、機能を拡張できます。これにより、プロジェクト固有のカスタマイズされたセットアップが可能になり、さらに優れた柔軟性と制御が提供されます。
  4. ネットワーク処理とサービス分離

    Quarkus Dev Services によってスピンアップされた各サービスは、分離された環境で実行されます。これは、異なる開発テスト間でポートの競合、データの残留、セキュリティの問題が発生しないようにするために非常に重要です。この分離にもかかわらず、サービスは Docker を使用して適切にネットワーク化され、必要に応じて相互に通信できるようになり、現実世界のデプロイ環境を模倣します。

  5. ライフサイクル管理

    Quarkus は、これらの動的にプロビジョニングされたサービスのライフサイクル全体を管理します。アプリケーションを開発モードで起動すると、必要なサービスが自動的に起動します。 Quarkus アプリケーションを停止すると、これらのサービスも終了します。この管理には、必要に応じてデータの永続性を処理することが含まれており、開発者はセットアップに遅れが生じることなく、中断したところから再開できるようになります。

使用例

Quarkus で PostgreSQL データベースを使用しているとします。既存の PostgreSQL 構成が検出されない場合、Quarkus は PostgreSQL Docker コンテナをキックスタートし、アプリケーションを自動的に接続します。

これらのサービスは、開発モードとテスト モードではデフォルトで有効になっていますが、必要に応じて application.properties:
を介して無効にすることができます。

quarkus.datasource.devservices.enabled=false

Quarkus が PostgreSQL データベースを使用しているシナリオと、開発サービスが最小限の労力でこれを容易にする方法について詳しく説明します。

Quarkus は、アクティブな PostgreSQL 構成がない (実行されていない、または明示的に構成されていない) ことを検出すると、Docker を使用して PostgreSQL コンテナを自動的に起動します。これは、Dev Services を通じてバックグラウンドで設定されます。

ORM レイヤーを介してデータベースと対話するには、Hibernate ORM 操作を簡素化する Quarkus Panache の使用を検討してください。環境をセットアップする方法は次のとおりです:

  1. 依存関係を追加

    まず、必要な依存関係を pom.xml に含めます。

    <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-hibernate-orm-panache</artifactId>
    </dependency>
    <dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-jdbc-postgresql</artifactId>
    </dependency>
    
  2. エンティティの定義

    次に、CityEntity などのエンティティを定義します。

    @Entity
    @Table(name = "cities")
    public class CityEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
    @Column(name = "public_id")
    private String publicId;
    
    @OneToOne
    private StateEntity state;
    
    @Column(nullable = false, name = "created_at")
    private Instant createdAt;
    
    @Column(nullable = false, name = "last_modified")
    private Instant lastModified;
    
    @PrePersist
    protected void onCreate() {
     createdAt = Instant.now();
     lastModified = createdAt;
    }
    
    @PreUpdate
    protected void onUpdate() {
     lastModified = Instant.now();
    }
    }
    
  3. リポジトリを作成します

    データベースと直接対話するリポジトリを実装します:

    @ApplicationScoped
    public class CityRepository implements 
    PanacheRepository<CityEntity> {
    }
    
  4. サービス層

    リポジトリを利用するサービス層を定義します:

    @ApplicationScoped
    public class CityServiceImpl implements CityService {
    
      @Inject
      CityRepository cityRepository;
    
      @Override
      public long countCities() {
       return cityRepository.count();
      }
    }
    
    public interface CityService {
     long countCities();
    }
    
  5. リソースエンドポイント

    @Path("/cities")
    @Tag(name = "City Resource", description = "City APIs")
    public class CityResource {
    
      @Inject
      CityService cityService;
    
      @GET
      @Path("/count")
      @Operation(summary = "Get the total number of cities", 
       description = "Returns the total count of cities in the 
       system.")
      @APIResponse(responseCode = "200", description = "Successful 
      response", content = @Content(mediaType = "application/json", 
      schema = @Schema(implementation = Long.class)))
      public long count() {
       return cityService.countCities();
      }
     }
    

Quarkus アプリケーション (mvn quarkus:dev) を実行すると、PostgreSQL コンテナーが自動的に起動することを確認します (図 2)。このシームレスな統合は、Quarkus Dev Services の威力を実証しており、アプリケーションに必要な外部サービスへの構成と接続セットアップを自動化することで、開発とテストを大幅に簡素化します。

Harnessing Automatic Setup and Integration with Quarkus Dev Services for Efficient Development

図 2 – アプリケーション ログ

プラットフォーム開発サービス

Quarkus Dev Services は、さまざまなサービスの構成と管理を処理することで開発とテストのフェーズを合理化し、開発者が実際のアプリケーションにさらに集中できるようにします。 Quarkus は、次のような幅広い開発サービスをサポートしています。

  • AMQP
  • アピキュリオ レジストリ
  • データベース
  • カフカ
  • キークローク
  • Kubernetes
  • MongoDB
  • ウサギMQ
  • パルサー
  • レデ​​ィス
  • 保管庫
  • インフィニスパン
  • エラスティックサーチ
  • 可観測性
  • Neo4j
  • ワイヤーモック
  • マイクロロックス
  • キークローク
  • その他多くの機能は、開発環境をシームレスに強化するように設計されています

結論

Quarkus Dev Services は、開発者が開発フェーズとテストフェーズで外部サービスをセットアップおよび統合する方法におけるパラダイムシフトを表しています。環境セットアップの自動化は、開発プロセスを加速するだけでなく、構成エラーの可能性を減らし、チームが堅牢で機能豊富なアプリケーションの作成に集中しやすくします。

Quarkus Dev Services の際立った利点の 1 つは、開発者の生産性を重視していることです。サービスの依存関係を手動で管理する必要がなくなるため、開発者はすぐにビジネス ロジックとアプリケーション機能の作業を開始できます。この合理化されたワークフローは、複数のサービスの開発と統合を同時に行う必要があるマイクロサービス アーキテクチャで特に有益です

結論として、Quarkus Dev Services を採用すると、開発チームの有効性とプロジェクトの成果に大きな影響を与える可能性があります。 Quarkus のシンプルさとパワーは実験を奨励します。
イテレーションが短縮され、最終的には開発サイクルが短縮されます。この種のテクノロジーの活用は、現代のビジネスがデジタル時代に成功するために必要なものです。

以上が自動セットアップとQuarkus開発サービスとの統合を利用して効率的な開発を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

なぜラッパークラスが必要なのですか? なぜラッパークラスが必要なのですか? Jun 28, 2025 am 01:01 AM

Javaは、基本的なデータ型がオブジェクト指向の操作に直接参加できないため、ラッパークラスを使用し、実際のニーズでオブジェクトフォームが必要になることが多いためです。 1.コレクションクラスは、リストが自動ボクシングを使用して数値を保存するなど、オブジェクトのみを保存できます。 2。ジェネリックは基本的なタイプをサポートしておらず、パッケージングクラスはタイプパラメーターとして使用する必要があります。 3.パッケージングクラスは、null値を表して、データまたは欠落データを区別できます。 4.パッケージングクラスは、データの解析と処理を容易にするための文字列変換などの実用的な方法を提供するため、これらの特性が必要なシナリオでは、パッケージングクラスは不可欠です。

Javaの「Enum」タイプは何ですか? Javaの「Enum」タイプは何ですか? Jul 02, 2025 am 01:31 AM

JavaのEnumsは、一定の値の固定数を表す特別なクラスです。 1。列挙キーワード定義を使用します。 2。各列挙値は、列挙型のパブリック静的最終インスタンスです。 3.各定数に動作を追加するフィールド、コンストラクター、および方法を含めることができます。 4.スイッチステートメントで使用し、直接比較をサポートし、name()、ordinal()、values()、valueof()などの組み込みメソッドを提供できます。 5.列挙は、コードのタイプの安全性、読みやすさ、柔軟性を向上させることができ、ステータスコード、色、週などの限られた収集シナリオに適しています。

現代のジャワの非同期プログラミング技術 現代のジャワの非同期プログラミング技術 Jul 07, 2025 am 02:24 AM

Javaは、Java19での完了可能なストリーム(ProjectReactorなど)、仮想スレッドの使用など、非同期プログラミングをサポートしています。 1.CompletableFutureチェーンコールを通じてコードの読みやすさとメンテナンスを改善し、タスクオーケストレーションと例外処理をサポートします。 2。ProjectReactorは、バックプレッシャーメカニズムとリッチ演算子を備えた応答性プログラミングを実装するためのモノとフラックスタイプを提供します。 3.仮想スレッドは、同時性コストを削減し、I/O集約型タスクに適しており、従来のプラットフォームスレッドよりも軽量で拡張が容易です。各方法には適用可能なシナリオがあり、適切なツールをお客様のニーズに応じて選択する必要があり、混合モデルはシンプルさを維持するために避ける必要があります

Javaでは、CallableとRunnableの違い Javaでは、CallableとRunnableの違い Jul 04, 2025 am 02:50 AM

Javaでは、CallableとRunnableには3つの主な違いがあります。まず、呼び出し可能な方法は結果を返すことができます。これは、呼び出し可能などの値を返す必要があるタスクに適しています。 run()runnableメソッドには戻り値がありませんが、ロギングなど、返品する必要のないタスクに適しています。第二に、Callableは、エラーの送信を容易にするためにチェックされた例外をスローすることができます。 runnableは、内部的に例外を処理する必要があります。第三に、runnableはスレッドまたはexecutorserviceに直接渡すことができますが、callableはexecutorserviceにのみ提出し、将来のオブジェクトをに返すことができます

インターフェイス分離原理は何ですか? インターフェイス分離原理は何ですか? Jul 02, 2025 am 01:24 AM

インターフェイス分離原理(ISP)では、クライアントが未使用のインターフェイスに依存していないことが必要です。コアは、大規模で完全なインターフェイスを複数の小さな洗練されたインターフェイスに置き換えることです。この原則の違反には、クラスがインターフェイスを実装し、多数の無効な方法が実装され、無関係な関数が同じインターフェイスに強制的に分類されると、実装されていない例外がスローされました。アプリケーション方法には、インターフェイスを一般的な方法に従って分割し、クライアントに応じたスプリットインターフェイスを使用し、必要に応じてマルチインターフェイスの実装の代わりに組み合わせを使用します。たとえば、印刷、スキャン、ファックスメソッドを含むマシンインターフェイスをプリンター、スキャナー、ファックスマシンに分割します。小規模プロジェクトまたはすべてのクライアントですべての方法を使用する場合、ルールを適切にリラックスできます。

Javaで酵素を使用するためのベストプラクティス Javaで酵素を使用するためのベストプラクティス Jul 07, 2025 am 02:35 AM

Javaでは、列挙は固定定数セットを表すのに適しています。ベストプラクティスには以下が含まれます。1。列挙を使用して固定状態またはオプションを表して、タイプの安全性と読みやすさを改善します。 2.フィールド、コンストラクター、ヘルパーメソッドなどの定義など、柔軟性を高めるために、酵素にプロパティとメソッドを追加します。 3. enummapとEnumsetを使用して、パフォーマンスとタイプの安全性を向上させ、配列に​​基づいてより効率的であるためです。 4.動的値、頻繁な変更、複雑なロジックシナリオなどの列挙の悪用を避けてください。これらは他の方法に置き換える必要があります。列挙の正しい使用は、コードの品質を改善し、エラーを減らすことができますが、適用される境界に注意を払う必要があります。

Java Nioとその利点を理解する Java Nioとその利点を理解する Jul 08, 2025 am 02:55 AM

Javanioは、Java 1.4によって導入された新しいIoapiです。 1)バッファとチャネルを対象としています。2)バッファ、チャネル、セレクターのコアコンポーネント、3)ノンブロッキングモードをサポートし、4)従来のIOよりも効率的に並行接続を処理します。その利点は、次のことに反映されます。1)非ブロッキングIOはスレッドオーバーヘッドを減らし、2)データ送信効率を改善し、3)セレクターがマルチプレックスを実現し、4)メモリマッピングはファイルの読み取りと書き込みを速めます。注:1)バッファのフリップ/クリア操作は混乱しやすく、2)不完全なデータをブロックせずに手動で処理する必要があります。3)セレクター登録は時間内にキャンセルする必要があります。4)NIOはすべてのシナリオに適していません。

Java Classloadersの動作方法 Java Classloadersの動作方法 Jul 06, 2025 am 02:53 AM

Javaのクラスロードメカニズムはクラスローダーを介して実装されており、そのコアワークフローは、読み込み、リンク、初期化の3つの段階に分けられます。ローディングフェーズ中、クラスローダーはクラスのバイトコードを動的に読み取り、クラスオブジェクトを作成します。リンクには、クラスの正しさの確認、静的変数へのメモリの割り当て、およびシンボル参照の解析が含まれます。初期化は、静的コードブロックと静的変数割り当てを実行します。クラスの読み込みは、親クラスローダーに優先順位を付けてクラスを見つけ、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを順番に試して、コアクラスライブラリが安全であり、重複した負荷を回避することを確認します。開発者は、urlclasslなどのクラスローダーをカスタマイズできます

See all articles