JPrime 2024 圓滿結束! !
JPrime 2024 的組織者再次竭盡全力提供多樣化的主題,確保每個人都能有所收穫。
然而,今天的文章並不是由 Michael Simons 的關於 「Spring 和 Quarkus 中整合測試的演變」 的演講引發的,儘管它非常有洞察力。他探索了整合測試策略,並專注於 Spring Boot 中的設定。
作者明確強調,他強調的問題在 Quarkus 中透過使用開發服務得到了有效解決(圖 1)。這凸顯了我對某些應用程式持懷疑態度的 Spring Boot 的另一個原因 - 它的複雜性與 Quarkus 中的簡化解決方案形成鮮明對比,特別是在使用開發服務時。
圖 1 – JPrime 2024
見證開發服務在新與會者中引發的驚訝是非常了不起的。然而,值得注意的是,Dev Services 並不是 Quarkus 的最新功能。相當長一段時間以來,它一直是該框架的組成部分。讓我們更深入地研究 Quarkus 開發服務並探索其持久的優勢。
Quarkus 開發服務
在 Quarkus 中,開發服務有助於在開發和測試模式下自動配置未配置的服務。本質上,如果您在未配置的情況下包含擴展,Quarkus 將自動啟動相關服務(通常在後台使用 Testcontainers)並配置您的應用程式以有效地使用此服務。
自動服務偵測與啟動
Quarkus Dev Services 可自動偵測和啟動必要的服務,例如資料庫、訊息代理程式和其他後端服務。此函數利用 pom.xml 或 build.gradle 中指定的應用程式依賴項。例如,新增資料庫驅動程式會自動觸發開發服務來啟動該資料庫的相應容器化執行個體(如果該執行個體尚未執行)。這裡使用的技術主要涉及 Testcontainers,它允許建立通用資料庫、Selenium Web 瀏覽器或任何其他可以在 Docker 容器中運行的輕量級、一次性執行個體。動態設定注入
一旦實例化所需的服務,Quarkus Dev Services 就會在執行時間動態地將相關服務連線詳細資訊注入到應用程式的配置中。這是在沒有任何手動幹預的情況下完成的,使用稱為連續測試的功能將標準資料庫或其他服務 URL 重新路由到自動配置的測試容器。 URL、使用者憑證和其他操作參數等配置屬性是無縫設定的,允許應用程式與這些服務交互,就像手動配置它們一樣。-
服務特定行為
開發服務專為各種類型的服務量身定制:- 資料庫: 自動提供根據您的應用程式需求量身定制的正在運行的資料庫,無論是 PostgreSQL、MySQL、MongoDB 或任何其他支援的資料庫。開發服務可確保相應的測試容器在開發過程中可用。
- 訊息系統:對於使用 Kafka 或 AMQP 等訊息系統的應用程序,Quarkus Dev Services 使用 Docker 啟動必要的代理並將它們與應用程式連接。
- 自訂開發服務:開發人員可以透過建立利用開發服務框架的自訂 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 容器。這是透過開發服務在幕後設定的。
要透過 ORM 層與資料庫交互,請考慮使用 Quarkus Panache,它簡化了 Hibernate ORM 操作。以下是設定環境的方法:
-
新增依賴項
首先,在 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 開發服務的強大功能,透過自動配置和連接設定到應用程式所需的外部服務,使開發和測試變得更加簡單。
圖 2 – 應用程式日誌
平台開發服務
Quarkus Dev Services 透過處理各種服務的配置和管理來簡化開發和測試階段,使開發人員能夠更加專注於實際應用程式。 Quarkus 支援廣泛的開發服務,包括:
- AMQP
- Apicurio 註冊表
- 資料庫
- 卡夫卡
- 鑰匙斗篷
- Kubernetes
- MongoDB
- RabbitMQ
- 脈衝星
- Redis
- 金庫
- 無限跨度
- Elasticsearch
- 可觀測性
- Neo4j
- WireMock
- 麥克斯
- 鑰匙斗篷
- 還有更多,每一個都旨在無縫增強您的開發環境
結論
Quarkus 開發服務代表了開發人員在開發和測試階段如何設定和整合外部服務的典範轉移。環境設定的自動化不僅加速了開發過程,還減少了配置錯誤的可能性,使團隊更容易專注於創建強大的、功能豐富的應用程式。
Quarkus 開發服務的突出優勢之一是強調開發人員的生產力。透過消除手動管理服務依賴項的需要,開發人員可以立即開始處理業務邏輯和應用程式功能。這種簡化的工作流程在微服務架構中特別有益,其中多個服務可能需要同時開發和整合
總之,採用 Quarkus 開發服務可以顯著影響您的開發團隊的效率和專案成果。 Quarkus 的簡單性和強大功能鼓勵實驗,
更快的迭代,最終加快開發週期。這種技術槓桿是現代企業在數位時代蓬勃發展所需要的。
以上是利用自動設定和與 Quarkus 開發服務的整合來實現高效開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中