踏上探索最新Spring Boot開發技術的旅程,版本3.2.0將引領您從建立基本的”Hello World”應用程式開始。在本教程中,我們不僅僅介紹Spring的常規入門,更深入探討如何構建REST API並與NoSQL資料庫無縫整合。Spring Boot 3.2.0憑藉其眾多新功能與優化,為探索現代開發實踐提供了引人入勝的舞台。本指南適合初學者與經驗豐富的開發者,承諾提供實際操作經驗,讓您充分利用Spring打造強大而現代的應用程式。讓我們開始這段Spring 3.2.0的旅程,見證簡約與創新的完美結合。
Spring Boot 3.2.0有哪些新特性
Spring Boot 3.2.0在Java開發領域邁出了重要的一步,要求最低Java 17環境,並擴展支援至前沿的Java 21。此版本引入了許多重新定義Spring框架使用方式的特點。
Java的顯著特點之一是支援虛擬線程,透過利用輕量級線程提升可擴展性和響應性。此外,Spring Boot 3.2.0首次引入專案CRaC(JVM檢查點恢復)的初步支援,使應用程式能在JVM重啟後恢復狀態,從而增強了可靠性和韌性。
安全性方面,SSL Bundle Reloading功能成為焦點,允許動態重新載入SSL配置,賦予開發者更動態地管理SSL證書的能力,確保應用程式的靈活性和安全性。
可觀測性的提升貫穿整個版本,為開發者提供增強的監控和追蹤功能,帶來更透明且易於管理的開發體驗。
遵循現代開發實踐,Spring Boot 3.2.0推出了專門用於RESTful(RestClient)和JDBC(JdbcClient)操作的客戶端,簡化與外部服務的通訊,增強整合能力。
與Jetty 12的兼容性是另一大亮點,讓開發者能利用Jetty網頁伺服器的最新特性。Spring Boot 3.2.0還擴展了其生態系統的兼容性,新增對Apache Pulsar的支援,拓寬Spring的事件驅動應用建構中的訊息功能。
承認Kafka和RabbitMQ的普及,Spring Boot 3.2.0為這些受歡迎的訊息系統引入了SSL捆綁支援,加強了依賴這些訊息代理的應用程式的安全態勢。
此版本還解決了依賴管理複雜性,採用重新設計的方法來處理嵌套JAR,確保應用程式部署更加可靠和可預測。最後,Docker映像構建得到改進,簡化了容器化過程,增強了Spring應用程式的可移植性和部署效率。
總結來說,Spring Boot 3.2.0與最新的Java版本保持一致,引入了突破性的功能,並改進了現有能力。此版本賦能開發者自信地構建現代、彈性且高性能的應用程式,在Java開發不斷演進的景觀中。
展示代碼
在本節中,我們將展開一個激動人心的旅程,開發一個Pokemon API,利用Spring的力量,並與HarperDB無縫整合。我們的重點將放在實現基本的CRUD(建立、讀取、更新、刪除)操作,特別強調利用每個Pokemon的唯一識別符(ID)。到本節結束時,您不僅將擁有一個完全功能的Spring應用程式,還將擁有一個可供使用的Pokemon API,隨時可以擴展並整合到更大的專案中。讓我們深入Pokemon和Spring開發的世界,在那裡簡單與創新相遇。
確保您的NoSQL資料庫HarperDB使用Docker運行。打開您的終端並執行以下命令:
docker run -d -e HDB_ADMIN_USERNAME=root -e HDB_ADMIN_PASSWORD=password -e HTTP_THREADS=4 -p 9925:9925 -p 9926:9926 harperdb/harperdb
此命令會拉取HarperDB的Docker映像並使用指定的配置啟動一個容器。-p
選項將容器的端口映射到本地機器,使得HarperDB界面可以在http://localhost:9925
訪問。
前往Spring Initializer設置我們的Spring應用程序。請遵循以下步驟:
- 選擇所需項目設置(例如,Maven或Gradle,Java版本)。
- 添加依賴:從依賴列表中選擇“Spring Web”。
- 點擊“Generate”以下載項目ZIP文件。
解壓已下載的ZIP文件,並將項目導入您偏好的集成開發環境(IDE),如IntelliJ IDEA或Eclipse。
現在我們的Spring應用程序已設置完畢,下一步是將其與HarperDB集成。為此,我們必須在項目中包含HarperDB依賴。將以下Maven依賴添加到您的pom.xml
文件中:
<dependency>
<groupId>io.harperdb</groupId>
<artifactId>harpderdb-core</artifactId>
<version>0.0.1</version>
</dependency>
依賴就緒後,我們接著編寫代碼。我們將在Spring中創建一個配置類HarperDB
,用於管理連接並使其成為Spring控制反轉(IoC)容器的一部分:
@Configuration
public class HarperDB {
@Bean
public Template template() {
Server server = ServerBuilder.of("http://localhost:9925")
.withCredentials("root", "password");
server.createDatabase("pokemons");
server.createTable("pokemon").id("id").database("pokemons");
return server.template("pokemons");
}
}
此配置類別,標註有@Configuration
,創建了一個名為template的Spring bean。Template
物件是與HarperDB互動的關鍵組件。我們使用伺服器連接詳情初始化它,包括伺服器URL和登入憑證。此外,我們創建了一個名為“pokemons”的資料庫和一個名為“pokemon”的表格,其中包含一個“id”欄位。這為我們在HarperDB中儲存Pokemon實體奠定了基礎。
為了增強演示,我們將首先使用Java的record
特性創建一個不可變實體:
public record Pokemon(String id, String name, String location) {
}
這個簡單的Pokemon record類封裝了Pokemon的基本屬性——其ID、名稱和位置——以不可變方式。
接下來,讓我們通過創建PokemonService
與資料庫建立通訊,作為通往HarperDB的橋樑:
@Service
public class PokemonService {
private final Template template;
public PokemonService(Template template) {
this.template = template;
}
public Optional<Pokemon> findById(String id) {
return template.findById(Pokemon.class, id);
}
public void save(Pokemon pokemon) {
template.upsert(pokemon);
}
public void delete(String id) {
template.delete(Pokemon.class, id);
}
}
PokemonService
類別是一個Spring服務,處理與Pokemon實體相關的基本操作。它利用我們先前配置的Template物件與HarperDB互動。findById
方法通過其ID檢索Pokemon,保存添加或更新Pokemon,並從資料庫中刪除並移除它。
最後,讓我們創建PokemonController,將這些操作作為REST端點公開:
@RestController
public class PokemonController {
private final PokemonService service;
public PokemonController(PokemonService service) {
this.service = service;
}
@GetMapping("/pokemons/{id}")
Pokemon findById(@PathVariable String id) {
return service.findById(id).orElseThrow(() -> new PokemonNotFoundException(id));
}
@PutMapping("/pokemons")
Pokemon newPokemon(@RequestBody Pokemon pokemon) {
service.save(pokemon);
return pokemon;
}
@DeleteMapping("/pokemons/{id}")
void deleteEmployee(@PathVariable String id) {
service.delete(id);
}
}
此PokemonController類別標註有@RestController,並定義了三個端點:
GET /pokemons/{id}
通過其ID檢索Pokemon。PUT /pokemons
創建新的Pokemon或更新現有的一個。DELETE /pokemons/{id}
通過其ID刪除Pokemon。
控制器依賴於PokemonService
來處理這些操作,為我們的Spring應用程序提供了清晰的職責分離。
有了這些組件,我們的Pokemon API可以使用HarperDB執行基本的CRUD操作。歡迎測試端點,親眼見證Spring與NoSQL數據庫的無縫集成!
您的Spring應用程序,集成HarperDB並配備了Pokemon API,現已準備好進行測試和執行。讓我們使用curl
命令探索一些常見場景。在繼續之前,請確保您的Spring應用程序正在運行。
創建一個Pokemon
curl -X PUT -H "Content-Type: application/json" -d '{"id": "1", "name": "Pikachu", "location": "Forest"}' http://localhost:8080/pokemons
此命令創建一個新Pokemon,ID為1,名稱為Pikachu,位置為Forest。
通過ID檢索Pokemon
curl http://localhost:8080/pokemons/{id}
將{id}
替換為您剛創建的Pokemon的實際ID。
更新Pokemon
curl -X PUT -H "Content-Type: application/json" -d '{"id": "1", "name": "Raichu", "location": "Thunderstorm"}' http://localhost:8080/pokemons
此命令將ID為1的現有Pokemon的名稱更新為Raichu,位置更新為Thunderstorm。
通過ID刪除Pokemon
curl -X DELETE http://localhost:8080/pokemons/{id}
將{id}
替換為您想要刪除的Pokemon的實際ID。
這些場景全面測試了您的Pokemon API中的基本CRUD操作,從創建Pokemon開始。根據您的具體用例和數據調整命令。祝測試愉快!
結論
在本教程中,我們利用Spring Boot 3.2.0的功能打造了一個精簡的Pokemon API,並與HarperDB無縫整合。最新版的Spring引入了關鍵特性,增強了我們創建彈性和可擴展應用程式的能力。
通過使用不可變實體、Spring IoC和HarperDB,我們展示了現代Java開發的簡潔性。示範代碼可在此獲取,為您的項目提供了一個基礎,隨時可以進行定制。
如需更新和深入見解,請參閱官方Spring博客。願您的Spring Boot和HarperDB之旅充滿創新與編碼的喜悅!祝編碼愉快!
Source:
https://dzone.com/articles/getting-started-with-boot-spring-320-building-a-he