Last updated on 11 Nisan 2019
Bu yazı dizisinde, Spring Boot ile bir backend oluşturmaya ve adım adım framework’ün bizlere sunduğu kolaylıkları paylaşmaya çalışacağım.
“If at
Pat Ricefirst you don’t succeed, call it version 1.0″
Giriş
Spring Boot, doğrudan çalıştırabileceğimiz, stand-alone, production seviyesinde Spring bazlı uygulama geliştirmeyi kolaylaştıran bir framework’tür ve çok az Spring yapılandırmasına ihtiyaç duyar.
- Stand-alone uygulama geliştirme
- Gömülü Tomcat, Jetty veya Undertow (war deploy’una gerek yok)
- Konfigürasyon yapılandırmasını kolaylaştıran başlangıç bağımlılıkları
- Spring ve 3. parti kütüphanelerin otomatik yapılandırımı
- Harici yapılandırma, metrikler, health-check gibi producton-ready özellikler sunma
- Kod üretimi ve XML konfigürasyonu gereksinimin olmaması
en temel özellikleridir.
Şimdi ilk olarak bir spring projesini nasıl oluşturduğumuza ve nasıl çalıştırdığımıza bir göz atalım.
Spring Initializr ile Proje Oluşturma
Spring Initializr, Spring Boot projesi oluşturmak amacıyla kullanılan web tabanlı bir araçtır. https://start.spring.io/ adresinden erişilebilir. Spring Initializr sayfasını açtığımızda; Proje Tipi, Dili, Spring Boot Versiyonu, Proje Metadata‘sı ve Bağımlılıkları olmak üzere basit özellikleri belirleyerek projemizi oluşturabiliriz.

İlk olarak proje tipi, kullanacağımız programlama dili ve Spring Boot versiyonunu seçerek, projemize özgü tanımlamalarımıza başlıyoruz, ardından Project Metadata kısmında proje base paket ve artifact ID (aynı zamanda proje ismimiz olacak) belirleyeceğimiz kısımları dolduruyoruz, ben bu proje için com.my base paketi ve mybackend ismini belirledim.
Spring Initializr kullanarak proje oluştururken başlangıçta projemiz için gerekli olan bağımlılıkları seçmemiz yararlı olacaktır. Anahtar kelimeler kullanarak ihtiyacımız olan bağımlılıkları rahatlıkla arayarak veya See all ile tüm kullanılabilir bağımlılıkları görüntülemek suretiyle seçebiliriz.
Başlangıçta Web ve DevTools ile projeyi başlatmayı, daha sonra kullanacağımız kütüphaneleri nasıl ekleyeceğimizi ve kullanacağımızı göstermek açısından tercih ettim.
DevTools (Spring Boot Development Tools) geliştirme aşamasında bize önemli kolaylıklar sunar, yaptığımız değişikliklerin kaydedildiği anda yeni bir deployment veya çalıştırmaya gereksinim duymadan otomatik restart ile yansımasını sağlar. Ancak bu davranış environment’a göre farklılık gösterebilir (misal IntelliJ ve Eclipse kullanrak aynı projeyi açıp deneyebilirsiniz).
Web (Servlet web application with Spring MVC and Tomcat) ise full-stack development için başlangıç paketidir, gömülü Tomcat ile ayrı bir Tomcat kurulumu ve konfigürasyonu, uygulama deployment’i gerekmeden uygulamamızı kolayca geliştirmemizi ve çalıştırmamızı sağlar.
İlgili bilgileri girdikten ve bağımlılıkları seçtikten sonra yapmamız gereken tek şey, Generate Project butonuna basmak ve oluşturulan .zip (bizim projemiz için mybackend.zip olacaktır) dosyasını herhangi bir lokasyona kaydedip açmak.
Projenin Çalıştırılması ve “Hello World…”
Projemizi oluşturup bir proje dizininde açtıktan sonra üzerinde geliştirme yapmaya başlayabiliriz. Geliştirme sürecinde Eclipse, STS (Spring Tool Suite), IntelliJ gibi IDE’ler kullanabiliriz. Ben geliştirme aşamasında daha çok JetBrains’in geliştirme araçlarını (bu proje için IntelliJ IDEA) tercih ediyorum. Tabi projenin importu da, kullanacağımız araca göre farklılık gösterecektir.
IntelliJ IDEA, JetBrains tarafından geliştirilen, son derece kullanışlı bir araç ancak Enterprise kullanım için Lisans ücreti ödemeniz gerekiyor, ancak eğitim amaçlı kullanım için ücretsiz lisans olanağı sunmakla birlikte Free versiyonu da bulunmaktadır. (Daha fazla bilgi için: https://www.jetbrains.com/ adresini ziyaret edebilirsiniz)
Editörümüzü açtıktan sonra yapmamız gereken şey; File > Open diyerek daha önce açtığımız projeyi IntelliJ içerisinde açmak. IntelliJ proje yapısı ve bağımlılıklarını otomatik olarak algılayıp bir maven projesi olarak uygulamamızı başlatacaktır.

Eclipse ve STS de durum biraz daha farklı, projemizi bir maven projesi olarak import etmemiz gerekemektedir, burada da yapacağımız şey; File > Import ile import wizard’ı açmak ve buradan Existing Maven Projects seçeneği ile projemizi eklemek olacaktır.

projemizin paket yapısına ve hiyerarşisine baktığımızda sadece tek bir paketin altında (com.my.mybackend) MyBackendApplication sınıfını göreceğiz. Bu sınıf uygulamamızın ana sınıfıdır ve içinde bir main metodu bulunur. Bu sınıfı çalıştırdığımızda (IntelliJ -> Run veya Eclipse -> Run As > Java Application ) projenin başarılı bir şekilde ayağa kalktığını göreceğiz.

Konsol ekranında projenin çalışması ile ilgili log’lar görülebilir, bu log’lar projenin sağlıklı bir şekilde çalışıp çalışmadığının, herhangi bir hata olup olmadığının kontrolü açısından da önemlidir. Proje sağlıklı olarak aya kalktığında son satırda uygulamamızın paket ve isim bilgisini görebiliriz.
Projemizin yapısına göz atacak olursak; en altta pom.xml dosyasını göreceğiz. Bu dosya maven konfigürasyonlarının tutulduğu dosyadır. Dosyanın içeriğine göz atacak olursak, Spring Initialzr ile proje oluştururken belirlediğimiz bağımlılıkların burada yer aldığını görebiliriz.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Dikkat ederseniz, DevTools ve Web haricinde Test bağımlılığının da otomatik olarak eklendiğini görebilirsiniz. Projemize yeni fonksiyonaliteler ekledikçe bu dosya içerisinde yeni bağımlılık tanımları yapacağız.
MybackendApplication.java sınıfının içerisine göz atarsak, @SpringBootApplication anotasyonu kullanıldığını görebiliriz.
package com.my.mybackend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//same as @Configuration @EnableAutoConfiguration @ComponentScan
public class MybackendApplication {
public static void main(String[] args) {
SpringApplication.run(MybackendApplication.class, args);
}
}
@SpringBootApplication anotasyonu birden fazla anotasyonun bir kombinasyonudur. Şu aşamada bizim için çok önemli olmamakla birlikte bu anotasyonların neler olduğunu ve açıklamalarını bulabilirsiniz;
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html
@EnableAutoConfiguration: enable Spring Boot’s auto-configurationmechanism @ComponentScan: enable@Componentscan on the package where the application is located@Configuration: allow to register extra beans in the context or import additional configuration classes
Küçük bir deneme yapacak olursak; main metodumuzun içine System.out.println(“Hello World…”); satırını ekleyip kaydettiğimizde (daha önce IDE’lerin farklı olarak dosya yapısı tuttuğundan bahsetmiştim, IntelliJ ile herhangi bir güncelleme yaptığımızda otomatik olarak dosya üzerine yansıdığını, Eclipse veya STS ile ise Ctrl+S veya Save butonu ile kaydetmemiz gerektiğini düşünürsek, Eclipse veya STS ile bu satırı kaydettiğimizde DevTools uygulamayı restart ederek ilgili değişikliği konsolda aynı anda görmemizi sağlayacaktır, IntelliJ ile bu davranışı göremeyiz, manuel restart yapmamız gerekebilir) konsolda artık “Hello World…” yazısını görebiliriz.

Bu yazımızda Spring Boot dünyasına merhaba dedik, ilerleyen bölümlerde projemize, Loglama, Veri Tabanı, Güvenlik, RESTful servisler gibi özellikleri nasıl ekleyeceğimizi anlatacağım. Şimdilik hoşçakalın.

