JPrime 2024 は無事終了しました!!
JPrime 2024 の主催者は、あらゆる人に何かを提供できるように、再び幅広いトピックを提供するために多大な労力を費やしました。
しかし、今日の記事は、非常に洞察力に富んだものでしたが、「Spring と Quarkus における統合テストの進化」 に関する Michael Simons の講義の 1 つによって引き起こされたものではありません。彼は、Spring Boot のセットアップに焦点を当てて、統合テスト戦略を検討しました。
著者は、自分が強調した問題は開発サービスの利用を通じて Quarkus で効果的に対処されることを明確に強調しました (図 1)。これは、私が特定のアプリケーションに対して Spring Boot に懐疑的な見方をするもう 1 つの理由を浮き彫りにします。その複雑さは、Quarkus の合理化されたソリューション、特に Dev Services の使用とは明らかに対照的です。
図 1 – JPrime 2024
新しい参加者の間で Dev Services の驚きが巻き起こったのを目撃するのは驚くべきことでした。ただし、Dev Services は Quarkus の最近の機能ではないことに注意することが重要です。これはかなり長い間フレームワークに不可欠な部分でした。 Quarkus Dev Services をさらに深く掘り下げ、その永続的なメリットを探ってみましょう。
Quarkus開発サービス
Quarkus では、Dev Services により、開発モードとテスト モードの両方で未構成のサービスの自動プロビジョニングが容易になります。基本的に、拡張機能を設定せずに組み込むと、Quarkus は関連するサービスを自動的に開始し (多くの場合、バックグラウンドで Testcontainers を利用します)、このサービスを効率的に使用するようにアプリケーションを設定します。
サービスの自動検出と起動
Quarkus Dev Services は、データベース、メッセージ ブローカー、その他のバックエンド サービスなどの必要なサービスの検出と起動を自動化します。この関数は、pom.xml または build.gradle で指定されたアプリケーションの依存関係を利用します。たとえば、データベース ドライバーを追加すると、Dev Services が自動的にトリガーされ、そのデータベースの対応するコンテナー化されたインスタンスがまだ実行されていない場合にはスピンアップされます。ここで使用されるテクノロジには主に Testcontainers が含まれます。これにより、一般的なデータベース、Selenium Web ブラウザ、または Docker コンテナ内で実行できるその他の軽量の使い捨てインスタンスを作成できます。動的構成の挿入
必要なサービスがインスタンス化されると、Quarkus Dev Services は関連するサービス接続の詳細を実行時にアプリケーションの設定に動的に挿入します。これは、標準データベースまたは他のサービス URL を自動プロビジョニングされたテストコンテナに再ルーティングする継続的テストと呼ばれる機能を使用して、手動介入なしで実行されます。 URL、ユーザー認証情報、その他の操作パラメータなどの構成プロパティがシームレスに設定されるため、アプリケーションは手動で構成されたかのようにこれらのサービスと対話できるようになります。-
サービス固有の動作
Dev Services は、さまざまなタイプのサービスに合わせて調整されています。- データベース: PostgreSQL、MySQL、MongoDB、またはその他のサポートされているデータベースであっても、アプリケーションのニーズに合わせた実行データベースを自動的に提供します。 Dev Services は、対応する Testcontainer が開発中に確実に利用できるようにします。
- メッセージング システム: Kafka や AMQP などのメッセージング システムを使用するアプリケーションの場合、Quarkus Dev Services は Docker を使用して必要なブローカーを起動し、それらをアプリケーションに接続します。
- カスタム Dev Services: 開発者は、Dev Services フレームワークを活用するカスタム Quarkus 拡張機能を作成することで、機能を拡張できます。これにより、プロジェクト固有のカスタマイズされたセットアップが可能になり、さらに優れた柔軟性と制御が提供されます。
ネットワーク処理とサービス分離
Quarkus Dev Services によってスピンアップされた各サービスは、分離された環境で実行されます。これは、異なる開発テスト間でポートの競合、データの残留、セキュリティの問題が発生しないようにするために非常に重要です。この分離にもかかわらず、サービスは Docker を使用して適切にネットワーク化され、必要に応じて相互に通信できるようになり、現実世界のデプロイ環境を模倣します。ライフサイクル管理
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 の使用を検討してください。環境をセットアップする方法は次のとおりです:
-
依存関係を追加
まず、必要な依存関係を 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>
-
エンティティの定義
次に、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(); } }
-
リポジトリを作成します
データベースと直接対話するリポジトリを実装します:
@ApplicationScoped public class CityRepository implements PanacheRepository<CityEntity> { }
-
サービス層
リポジトリを利用するサービス層を定義します:
@ApplicationScoped public class CityServiceImpl implements CityService { @Inject CityRepository cityRepository; @Override public long countCities() { return cityRepository.count(); } } public interface CityService { long countCities(); }
-
リソースエンドポイント
@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 の威力を実証しており、アプリケーションに必要な外部サービスへの構成と接続セットアップを自動化することで、開発とテストを大幅に簡素化します。
図 2 – アプリケーション ログ
プラットフォーム開発サービス
Quarkus Dev Services は、さまざまなサービスの構成と管理を処理することで開発とテストのフェーズを合理化し、開発者が実際のアプリケーションにさらに集中できるようにします。 Quarkus は、次のような幅広い開発サービスをサポートしています。
- AMQP
- アピキュリオ レジストリ
- データベース
- カフカ
- キークローク
- Kubernetes
- MongoDB
- ウサギMQ
- パルサー
- レディス
- 保管庫
- インフィニスパン
- エラスティックサーチ
- 可観測性
- Neo4j
- ワイヤーモック
- マイクロロックス
- キークローク
- その他多くの機能は、開発環境をシームレスに強化するように設計されています
結論
Quarkus Dev Services は、開発者が開発フェーズとテストフェーズで外部サービスをセットアップおよび統合する方法におけるパラダイムシフトを表しています。環境セットアップの自動化は、開発プロセスを加速するだけでなく、構成エラーの可能性を減らし、チームが堅牢で機能豊富なアプリケーションの作成に集中しやすくします。
Quarkus Dev Services の際立った利点の 1 つは、開発者の生産性を重視していることです。サービスの依存関係を手動で管理する必要がなくなるため、開発者はすぐにビジネス ロジックとアプリケーション機能の作業を開始できます。この合理化されたワークフローは、複数のサービスの開発と統合を同時に行う必要があるマイクロサービス アーキテクチャで特に有益です
結論として、Quarkus Dev Services を採用すると、開発チームの有効性とプロジェクトの成果に大きな影響を与える可能性があります。 Quarkus のシンプルさとパワーは実験を奨励します。
イテレーションが短縮され、最終的には開発サイクルが短縮されます。この種のテクノロジーの活用は、現代のビジネスがデジタル時代に成功するために必要なものです。
以上が自動セットアップとQuarkus開発サービスとの統合を利用して効率的な開発を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
