Java geliştiricileri, Spring Boot'un en popüler 16 uygulama yorumu!

Spring Boot, mikro hizmetler geliştirmek için en popüler Java çerçevesidir. Bu yazıda, 2016'dan beri Spring Boot'u mesleki gelişimde kullanmada benimsediğim en iyi uygulamaları sizlerle paylaşacağım. Bu içerikler kişisel deneyimlerime ve bazı tanınmış Spring Boot uzmanlarının makalelerine dayanmaktadır.

Bu makalede, Spring Boot'un belirli uygulamalarına odaklanacağım (çoğu zaman Spring projeleri için de geçerlidir). En iyi uygulamalar, belirli bir sıra olmadan aşağıda sıralanmıştır.

Üçüncü taraf bağımlılıklarını korumak için özel BOM kullanın

Bu uygulama, gerçek projelerdeki deneyimime dayanmaktadır.

Spring Boot projesinin kendisi çok sayıda açık kaynak projesini kullanır ve entegre eder ve bu üçüncü taraf bağımlılıklarını korumamıza yardımcı olur. Ancak gerçek proje kullanımına dahil olmayan bazı parçalar var, bu da projedeki sürümü korumamızı gerektiriyor. Büyük bir projede çok sayıda gelişmemiş modül varsa, bakımı çok zahmetli olacaktır.

Nasıl yapılır? Aslında, Spring IO Platformu yaptığı şeydir, Spring Boot'un bir alt projesidir ve diğer üçüncü taraf açık kaynak kitaplıklarını korur. Spring IO Platform'dan kendi temel proje platform-bom yazmayı öğrenebiliriz ve tüm iş modülü projeleri BOM şeklinde tanıtılmalıdır. Bu şekilde, üçüncü taraf bağımlılıklarını yükseltirken, yalnızca bu bağımlı sürümü yükseltmeniz gerekir.

< bağımlılık yönetimi >

< bağımlılıklar >

< bağımlılık >

< Grup kimliği > io.spring.platform < /Grup kimliği >

< artifactId > platform-bom < / artifactId >

< versiyon > Kahire-SR3 < / version >

< tip > pom < / tür >

< dürbün > ithalat < /dürbün >

< /bağımlılık >

< / bağımlılıklar >

< / dependencyManagement >

Otomatik yapılandırmayı kullanın

Spring Boot'un ana özelliklerinden biri otomatik konfigürasyonun kullanılmasıdır. Bu, kodunuzu basitleştirip çalışmasını sağlayan Spring Boot'un bir parçasıdır. Sınıf yolunda belirli bir jar dosyası algılandığında, otomatik yapılandırma etkinleştirilecektir.

Kullanmanın en kolay yolu Spring Boot Starters'a güvenmektir. Bu nedenle, Redis ile entegre etmek istiyorsanız, önce şunları ekleyebilirsiniz:

< bağımlılık >

< Grup kimliği > org.springframework.boot < /Grup kimliği >

< artifactId > Spring-boot-starter-data-redis < / artifactId >

< /bağımlılık >

MongoDB ile entegre olmak istiyorsanız şuna ihtiyacınız var:

< bağımlılık >

< Grup kimliği > org.springframework.boot < /Grup kimliği >

< artifactId > Spring-boot-starter-veri-mongodb < / artifactId >

< /bağımlılık >

Bu başlatıcıların yardımıyla, bu hantal konfigürasyonlar iyi bir şekilde entegre edilebilir ve birlikte çalışabilir ve hepsi test edilip doğrulanır. Bu, korkunç Jar cehenneminden kaçınmak için çok yararlıdır (https://dzone.com/articles/what-is-jar-hell).

Aşağıdaki ek açıklama öznitelikleri kullanılarak belirli yapılandırma sınıfları otomatik yapılandırmanın dışında bırakılabilir:

@EnableAutoConfiguration (hariç tut = {ClassNotToAutoconfigure.class})

Ancak bu yalnızca kesinlikle gerekli olduğunda yapılmalıdır.

Otomatik yapılandırmayla ilgili resmi belgelere şu adresten ulaşılabilir: https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html.

Yeni bir Spring Boot projesi başlatmak için Spring Initializr'ı kullanın

Bu en iyi uygulama Josh Long'dan (Spring Advocate, @starbuxman) gelmektedir.

Spring Initializr (https://start.spring.io/), yeni bir Spring Boot projesi oluşturmanın ve ihtiyaçlarınıza göre kullanılabilecek bağımlılıkları yüklemenin süper basit bir yolunu sağlar.

Initializr ile bir uygulama oluşturmak, Spring otomatik yapılandırması için uygun olan test edilmiş ve doğrulanmış bağımlılıkları almanızı sağlar. Hatta yeni entegrasyonlar bile bulabilirsin ama farkına varamayabilirsin.

Yaygın kurumsal sorunlar için kendi otomatik yapılandırmanızı oluşturmayı düşünün

Bu ayrıca Josh Long'dan (Spring Advocate, @starbuxman) geliyor - bu uygulama ileri düzey kullanıcılar içindir.

Büyük ölçüde Spring Boot'a dayanan bir şirkette veya ekipte çalışıyorsanız ve çözülmesi gereken ortak sorunlar varsa, kendi otomatik yapılandırmanızı oluşturabilirsiniz.

Bu görev çok fazla çalışma gerektirir, bu nedenle faydaların yatırıma değip değmeyeceğini düşünmeniz gerekir. Çok az farklı özelleştirilmiş yapılandırmalara kıyasla tek bir otomatik yapılandırmayı sürdürmek daha kolaydır.

Spring Boot konfigürasyonunun bu hükmü açık kaynaklı bir kütüphane olarak yayınlanırsa, konfigürasyon çalışmasını binlerce kullanıcı için büyük ölçüde basitleştirecektir.

Kod dizini yapısını doğru tasarlayın

Çok fazla özgürlüğünüz olmasına rağmen, kaynak kod yapınızı tasarlamak için izlemeye değer bazı temel kurallar vardır.

  • Varsayılan paketi kullanmaktan kaçının. Her şeyin (giriş noktanız dahil) iyi adlandırılmış bir pakette olduğundan emin olun, böylece montaj ve bileşen taramayla ilgili sürprizlerden kaçınabilirsiniz;
  • Application.java'yı (uygulamanın giriş sınıfı) en üst düzey kaynak kodu dizininde tutun;
  • Denetleyicileri ve hizmetleri işlev odaklı modüllere koymanızı öneririm, ancak bu isteğe bağlıdır. Bazı çok iyi geliştiriciler, tüm denetleyicileri bir araya getirmeyi önerir. Ne olursa olsun, tek bir stile bağlı kalın!

@Controller'ı kısa ve öz tutun

Kontrolör çok basit olmalı. GRASP'nin kontrolör modu kısmının açıklamasını buradan okuyabilirsiniz (https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Controller). Denetleyicinin, gerçek iş mantığını yürütmek yerine bir koordinatör ve temsilci olarak hareket etmesini istersiniz. Aşağıdakiler ana uygulamalardır:

  • Denetleyici vatansız olmalıdır! Varsayılan olarak, denetleyici bir tekildir ve herhangi bir durum pek çok soruna neden olabilir;
  • Denetleyici iş mantığını yürütmemeli, yetkilendirmeye güvenmelidir;
  • Denetleyici, hizmete aktarılmaması gereken uygulamanın HTTP katmanını işlemelidir;
  • Denetleyiciler, kullanım durumları / iş yetenekleri etrafında tasarlanmalıdır.

Bu içeriğin derinliklerine inmek için, REST API'leri tasarlamaya yönelik en iyi uygulamaları daha iyi anlamanız gerekir. Spring Boot'u kullanmak isteseniz de istemeseniz de öğrenmeye değer.

@Service'i işletme işlevleri etrafında oluşturun

Servis, Spring Boot'un başka bir temel konseptidir. İş fonksiyonları / etki alanları / kullanım durumları (onlara ne derseniz deyin) etrafında hizmetler oluşturmanın en iyisi olduğunu görüyorum.

Uygulama içerisinde AccountService, UserService, PaymentService gibi isimlerle hizmet tasarlamak, DatabaseService, ValidationService ve CalculationService'den daha uygundur.

İdeal bir durum olan Kontrolcü ve Servis arasında bire bir eşleştirme kullanmaya karar verebilirsiniz. Ancak bu, Servislerin birbirini arayamayacağı anlamına gelmez!

Veritabanını temel iş mantığından bağımsız hale getirin

Spring Boot'da veritabanı etkileşimini en iyi şekilde nasıl idare edeceğimi bilmiyordum. Robert C. Martin'in "Clear Architecture" yazısını okuduktan sonra benim için daha netleşti.

Veritabanı mantığınızın hizmetten ayrılmasını istiyorsunuz. İdeal olarak, hizmetin hangi veritabanıyla iletişim kurduğunu bilmesini istemezsiniz, bu da nesnenin kalıcılığını özetlemek için biraz soyutlama gerektirir.

Robert C. Martin, veritabanınızın bir "ayrıntı" olduğunu, bu da uygulamanızı belirli bir veritabanına bağlamadığınız anlamına geldiğini kuvvetle belirtti. Geçmişte birkaç kişi veri tabanlarını değiştiriyordu. Spring Boot ve modern mikro hizmet geliştirmenin kullanımının işleri hızlandıracağını fark ettim.

İş mantığını Spring Boot kodundan uzak tutun

"Clear Architecture" derslerini göz önünde bulundurarak, iş mantığınızı da korumalısınız. Her tür Spring Boot kodunu karıştırmak çok cazip geliyor ... bunu yapmayın. Günaha direnebilirseniz, iş mantığınızı yeniden kullanılabilir hale getireceksiniz.

Hizmetin bir kısmı genellikle bir kütüphane haline gelir. Koddan çok sayıda Bahar ek açıklamasını kaldırmazsanız, oluşturmak daha kolaydır.

Yapıcı enjeksiyon kullanılması tavsiye edilir

Bu uygulama Phil Webb'den (Spring Boot Proje Lideri, @phillip_webb) geliyor.

İş mantığını Spring Boot kod saldırılarına karşı korumanın bir yolu, yapıcı enjeksiyonu kullanmaktır. Yalnızca @Autowired açıklamasının yapıcıda isteğe bağlı olması değil, aynı zamanda yay olmadan çekirdeği kolayca başlatabilirsiniz.

Eşzamanlılık modeline aşina

Yazdığım en popüler makalelerden biri "Spring Boot'ta Eş Zamanlılığa Giriş" dir (https://www.e4developer.com/2018/03/30/introduction-to-concurrency-in-spring-boot/) . Bence bunun nedeni, bu alanın genellikle yanlış anlaşılması ve göz ardı edilmesi. Yanlış kullanılırsa sorunlar ortaya çıkacaktır.

Spring Boot'ta, Controller ve Service varsayılan olarak tekildir. Dikkatli olmazsanız, bu olası eşzamanlılık sorunlarını ortaya çıkaracaktır. Ayrıca, genellikle sınırlı bir iş parçacığı havuzuyla da uğraşıyorsunuz. Lütfen bu kavramlara aşina olun.

Yeni WebFlux tarzı Spring Boot uygulamasını kullanıyorsanız, "Springin WebFlux / Reactor Parallelism and Backpressure" bölümünde nasıl çalıştığını açıkladım.

Yapılandırma yönetiminin dışsallaştırılmasını güçlendirin

Bu, Spring Boot'un ötesinde, ancak bu, insanlar birden fazla benzer hizmet oluşturmaya başladığında yaygın bir sorundur ...

Spring uygulamasının konfigürasyonunu manuel olarak halledebilirsiniz. Birden fazla Spring Boot uygulamasıyla uğraşıyorsanız, konfigürasyon yönetimini daha güçlü hale getirmeniz gerekir.

İki ana yöntem öneriyorum:

  • Spring Cloud Config gibi bir yapılandırma sunucusu kullanın;
  • Tüm yapılandırmaları ortam değişkenlerinde saklayın (bunları git deposuna göre yapılandırabilirsiniz).

Bu seçeneklerden herhangi biri (ikinci seçenek daha fazladır) DevOps'ta daha az iş yapmanızı gerektirir, ancak bu mikro hizmetler dünyasında çok yaygındır.

Küresel istisna işleme sağlayın

İstisnaları ele almak için gerçekten tutarlı bir yola ihtiyacınız var. Spring Boot iki ana yöntem sağlar:

  • Genel istisna işleme stratejilerini tanımlamak için HandlerExceptionResolver'ı kullanmalısınız;
  • Denetleyiciye @ExceptionHandler ek açıklamalarını da ekleyebilirsiniz, bu bazı senaryolarda yararlı olabilir.

Bu neredeyse İlkbahar'dakiyle aynıdır ve Baeldung'un REST ve Bahar arasındaki hata işlemeyle ilgili ayrıntılı bir makalesi vardır (https://www.baeldung.com/exception-handling-for-rest-with-spring), bu da okumaya değer .

Günlük çerçevesini kullanın

Bunun zaten farkında olabilirsiniz, ancak Logger'ı manuel olarak System.out.println () kullanmak yerine günlük kaydı için kullanmalısınız. Bu, neredeyse hiç yapılandırma olmadan Spring Boot'da kolayca yapılır. Sadece bu sınıfın günlükçü örneğini alın:

Logger logger = LoggerFactory.getLogger (MyClass.class);

Bu önemlidir çünkü ihtiyaçlarınıza göre farklı kayıt seviyeleri belirlemenize izin verir.

Kodunuzu test edin

Bu, Spring Boot'a özgü değildir, ancak kodunuzun bir anımsatıcı ile test edilmesi gerekir! Test yazmadıysanız, eski kodu baştan yazacaksınız.

Kod tabanınızı başka biri kullanırsa, orada herhangi bir şeyi değiştirmek tehlikeli hale gelecektir. Birbirine bağlı birden fazla hizmetiniz olduğunda bu daha da riskli olabilir.

Spring Boot en iyi uygulamaları nedeniyle, tüketici odaklı sözleşmeleriniz için Spring Cloud Sözleşmesini kullanmayı düşünmelisiniz, bu da diğer hizmetlerle entegrasyonunuzun kullanımını kolaylaştıracaktır.

Testi daha kolay ve daha odaklı hale getirmek için test dilimlerini kullanın

Bu uygulama Madhura Bhave'den (Bahar Geliştiricisi, @ madhurabhave23) gelmektedir.

Spring Boot ile kodu test etmek zor olabilir - veri katmanını başlatmanız, çok sayıda hizmeti bağlamanız, bir şeyleri simüle etmeniz gerekir ... Aslında bu o kadar da zor değil! Cevap, test dilimlerini kullanmaktır.

Test dilimlerini kullanarak, uygulamanın yalnızca bir bölümünü gerektiği gibi bağlayabilirsiniz. Bu size çok zaman kazandırabilir ve testlerinizin kullanılmayan içerikle ilişkilendirilmemesini sağlayabilir. Spring.io'dan, Bahar testi 1.4 ile Özel test dilimi adlı bir blog yazısı (https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot-1- 4) Bu tekniği açıkladı.

sonuç olarak

Spring Boot sayesinde, Spring tabanlı mikro hizmetler yazmak her zamankinden daha kolay hale geliyor. Umarım bu en iyi uygulamalar sayesinde, uygulama süreciniz yalnızca daha hızlı değil, aynı zamanda uzun vadede daha güçlü ve daha başarılı olur. iyi şanslar!

Not: Benim yaptığım ilk uygulama dışında, geri kalanı orijinal yabancı dil içeriği.

Orijinal: https://www.e4developer.com/2018/08/06/spring-boot-best-practices/

Yazar: Bartosz Jedrzejewski

Derleyici: Yan Xiaoyu, JAVA teknoloji geliştirme ve sistem mimarisinde 10 yıldan fazla deneyime sahip.Güncel ana yön Web güvenliği, mikro hizmet mimarisi ve büyük veri uygulamaları. Boş zamanlarında okumayı, çalıştırmayı ve yazmayı seviyor ve açık kaynak teknolojisinin tanıtımı ve müjdeciliğine aktif olarak katılmayı seviyor. Kişisel WeChat Kimliği: rainboyan.

Sorumluluk Reddi: Bu makale bir gönderimdir ve telif hakkı diğer tarafa aittir.

Pek çok resim, Pekin Hongqiao Pazarı'nın son 40 yıldaki değişimlerini gösteriyor. "Dünyanın Kızıl Köprüsü" nü ziyaret ettiniz mi?
önceki
Programlama korkunç, her gün hatalar yazıyoruz
Sonraki
"AIMedia Think Tank" Beşinci Yeni Yıl Sempozyumu Pekin'de Yapıldı
Neden ciddi bir makine öğrenimi mühendisi eksikliği var?
"Üç Şehir ve Bir Bölge" nin inşası tüm hızıyla devam ediyor ve bu yıl bu önemli işleri yapacağız
AMD Ryzen 73700U ilk pozlama: 12nm Zen + mimarisine geçiş mi?
Programcılar Python'u seviyor mu? Programcıların% 90'ı öyle diyor ...
Spoiler uyarısı, hükümet çalışma raporunda 8 Pekin şehri "yeni kent simgesi"
Google, büyük gizlilik sorunlarını ortadan kaldırır; TensorFlow 2.0 yakında piyasaya sürülecek | Geek Başlıkları
Yeşil Cehennemin Fatihi: Yeni Kuzey'in en hızlı üretim araba envanteri / bu, pistin gerçek kralı
2019 Beijing Two Sessions, gelin ve onların "iş ortamını optimize etme" hakkındaki konuşmalarını dinleyin
Google kötüdür! Android mobil uygulamalarının% 99,9'u gizliliği çalıyor
Shandong için başka bir büyük plan yayınlandı! Qingdao üç "merkez" inşa etmek istiyor
Geliştiricileri hedefleyen ve çeşitlendirilmiş kullanıcı senaryoları geliştiren OPPO Teknolojisi Açık Gün!
To Top