Spring Boot最佳實踐

2021-08-23 12:08:24 字數 2179 閱讀 7311

org.springframework.boot

spring-boot-starter-data-redis

如果你想使用mongodb,你有:

org.springframework.boot

spring-boot-starter-data-mongodb

依賴於這些starter,依靠這些經過測試和驗證的配置,可以很好地協同工作。這有助於避免可怕的jar hell(jar包地域)。

通過使用以下注釋屬性,可以從自動配置中排除某些類: @enableautoconfiguration(exclude = ),但只有在絕對必要時才應該這樣做。

正確構建**

服務是spring boot的另乙個核心概念。我發現最好圍繞業務功能/領域/用例構建服務,也就是你想要的功能。

使用稱為accountservice,userservice,paymentservice之 類的服務的應用程式比使用databaseservice,validationservice,calculationservice等的應用程式更容易處理。

你可以決定使用控制器和服務之間的1對1對映。那將是理想的。這並不意味著,服務不能互相使用!

使資料庫成為乙個細節 - 從核心邏輯中抽象出來

我曾經不確定如何在spring boot中最好地處理資料庫互動。在閱讀了羅伯特·c·馬丁的「乾淨架構」之後,對我來說更加清晰。

從服務中抽象出資料庫邏輯,理想情況下,不要希望服務知道它正在與哪個資料庫通訊。有一些抽象可以封裝物件的永續性。

羅伯特c.馬丁熱情地爭辯說你的資料庫是乙個「細節」,這意味著不要將應用程式耦合到特定資料庫,雖然過去很少有人會切換資料庫,但是我注意到,使用spring boot和現代微服務開發 - 事情就會變得更快,難以預料。

保持業務邏輯不受spring boot**的影響

考慮到「乾淨架構」的教訓,應該保護業務邏輯。將業務和各種spring boot**混合在一起是非常誘人的......不要這樣做。如果你抵制**,你將保持你的業務邏輯可重用。

部分服務通常成為庫,如果你不必從**中刪除大量spring注釋的話,那麼代表你的**更容易建立。

熟悉併發模型

在spring boot中,控制器和服務是預設的singletons。如果你不小心,這會引入可能的併發問題。您通常也在處理有限制的執行緒池。

將配置管理放在外部

這一點超出了spring boot,雖然這是人們開始建立多個類似服務時常見的問題......

你可以手動處理配置spring應用程式。如果你正在處理許多spring boot應用程式,則需要使配置管理成熟。

我建議兩種主要方法:

1.使用配置伺服器,例如spring cloud config

2.將所有配置儲存在環境變數中(可以基於git儲存庫進行配置)

這些選項中的任何乙個(第二個選項)都要求你涉足devops。

提供全域性異常處理

你真的需要一種處理異常的一致方法,spring boot提供了兩種主要方法:

1.可以使用 handlerexceptionresolver來定義全域性異常處理策略。

2.可以使用@exceptionhandler注釋控制器,想在某些情況下特定,這可能會很有用。

使用日誌框架

應該使用logger進行日誌記錄,而不是使用system.out.println()手動執行。這很容易在spring boot中完成,幾乎沒有配置。只需獲取該類的記錄器例項:

logger logger = logge***ctory.getlogger(myclass.class);

這很重要,因為它可以讓你根據需要設定不同的日誌記錄級別。

測試你的**

這不是spring boot特有的,但需要提醒一下!測試你的**。如果沒有編寫測試,那麼意味著從一開始就編寫的是舊**。

如果有其他人來到你的**庫,很快就會改變任何東西,當有多個服務相互依賴時,這時可能更具風險。

由於存在spring boot最佳實踐,因此應該考慮將spring cloud contract用於你的消費者驅動合同,它將使你與其他服務的整合更容易使用。

Spring Boot 的 Redis 最佳實踐

org.springframework.bootgroupid spring boot starter data redisartifactid dependency configuration public class redisconfig extends cachingconfigurersu...

最佳實踐 Flutter 最佳實踐

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...

JUnit最佳實踐

junit最佳實踐 cherami 轉貼 參與分 20053,專家分 4960 發表 2003 9 16 下午7 57 版本 1.0 閱讀 3899次 martin fowler說過 當你試圖列印輸出一些資訊或除錯乙個表示式時,寫一些測試 來替代那些傳統的方法。一開始,你會發現你總是要建立一些新的f...