Derinlemesine Spring Boot Fundamentals
By Onder Teker
()
About this ebook
Bu kitap Spring Framework & onun üzerinde kurulu Spring Boot için kurulum ve yapılandırma konularıyla başlamaktadır. Database, SQL, ORM & Hibernate ile Web, REST, JSON, API konularınını hem temel hem de ileri düzeyde anlatmaktadır. HTML, MVC ile ilgili konular da kitabın kapsamındadır. REST için RestTemplate ile client yazılması gibi MicroServices konuları içerilmektedir. Birden çok entity ile relation konuları, layer kullanarak service ve DTO nesnelerinin yapılması gibi profesyonellerin bilmesi gerekenler de kitaba koyulmuştur. Bunun dışında errors, properties ve messages gibi konuar da kapsama alınmıştır.
Yazar
Kitabın yazarı bilgisayar mühendisi Önder Teker, yazılım geliştirme alanında 1990'lı yılların sonlarından beri projeler geliştirmekte, 2000'li yılların başından beri eğitimler vermekte, 2010'lu yılların başından beri de kitap ve eğitim setleri üretmektedir.
Read more from Onder Teker
Derinlemesine Spring Boot Web Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Object-Oriented Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Python Rating: 0 out of 5 stars0 ratingsDerinlemesine İngilizce Dilbilgisi Rating: 5 out of 5 stars5/5Derinlemesine Android Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine C Fundamentals ve Functional Programming Rating: 3 out of 5 stars3/5Doğrudan Database Back-End Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine PHP Fundamentals Web Database Services Rating: 0 out of 5 stars0 ratingsDerinlemesine HTML & CSS Rating: 0 out of 5 stars0 ratingsDerinlemesine Python AI Natural Language Processing Rating: 0 out of 5 stars0 ratingsDerinlemesine Python AI Machine Learning Rating: 0 out of 5 stars0 ratingsDerinlemesine SQL Rating: 0 out of 5 stars0 ratingsDerinlemesine Python AI Computer Vision Rating: 0 out of 5 stars0 ratingsDerinlemesine Python Data Science Rating: 0 out of 5 stars0 ratingsDerinlemesine JavaScript Rating: 5 out of 5 stars5/5Derinlemesine Java - MVC, JSF & Primefaces Rating: 0 out of 5 stars0 ratingsDerinlemesine Android UI Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine C ++ ve Object-Oriented Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Web Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine React Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - ORM, JPA & Hibernate Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - EJB, JMS ve Web Services Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Desktop Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine NoSQL Rating: 0 out of 5 stars0 ratingsDerinlemesine JavaScript Language Rating: 0 out of 5 stars0 ratings
Related to Derinlemesine Spring Boot Fundamentals
Related ebooks
Derinlemesine Spring Boot Cloud Rating: 0 out of 5 stars0 ratingsDerinlemesine React Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - MVC, JSF & Primefaces Rating: 0 out of 5 stars0 ratingsDoğrudan Java Web Enterprise Mobile Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - EJB, JMS ve Web Services Rating: 0 out of 5 stars0 ratingsDerinlemesine Android Data Programming Rating: 0 out of 5 stars0 ratingsFlutter için Dart Programlama Rating: 0 out of 5 stars0 ratingsDerinlemesine Spring Boot Data Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - ORM, JPA & Hibernate Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Desktop Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Java - Patterns, CDI ve Spring Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Database Programming Rating: 0 out of 5 stars0 ratingsDoğrudan Java Eclipse Rating: 0 out of 5 stars0 ratingsDoğrudan Java Fundamentals Database Desktop Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine SQL Rating: 0 out of 5 stars0 ratingsDerinlemesine PHP Fundamentals Web Database Services Rating: 0 out of 5 stars0 ratingsDerinlemesine Python AI Computer Vision Rating: 0 out of 5 stars0 ratingsDoğrudan Web Front-End Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine C ++ ve Object-Oriented Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Android UI Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine NoSQL Rating: 0 out of 5 stars0 ratingsDerinlemesine Python AI Machine Learning Rating: 0 out of 5 stars0 ratingsInternet Nasıl Çalışır?: Education Rating: 0 out of 5 stars0 ratingsDoğrudan C#.NET Rating: 0 out of 5 stars0 ratingsRapid Miner ile Veri Madenciliği Rating: 0 out of 5 stars0 ratingsDerinlemesine React UI Rating: 0 out of 5 stars0 ratingsDerinlemesine Java Web Programming Rating: 0 out of 5 stars0 ratingsDerinlemesine Linux For Developers Rating: 0 out of 5 stars0 ratingsDerinlemesine JavaScript UI Rating: 0 out of 5 stars0 ratingsDerinlemesine JavaScript Rating: 5 out of 5 stars5/5
Reviews for Derinlemesine Spring Boot Fundamentals
0 ratings0 reviews
Book preview
Derinlemesine Spring Boot Fundamentals - Onder Teker
Derinlemesine
Spring
Boot
Fundamentals
Önder Teker
Godoro Yayıncılık
GODORO YAYINCILIK
Yayıncı Sertifikası No: 40946
Kitabın Adı:
Derinlemesine Spring Boot Fundamentals
Copyright © 2023 Godoro Yayıncılık
Kitabın Yazarı:
Önder Teker
Birinci Basım, Mayıs 2023, İstanbul
ISBN:
978-605-71725-5-6
Kapak Tasarımı ve Mizanpaj:
Önder Teker
Baskı ve Ciltleme:
Godoro
Özel Baskı Çözümleri
Atikali Mah. Fatih Cad. No: 81 D: 2
Fatih / İstanbul
Telefon : (533) 561-2435
http://www.godoro.com
GODORO YAYINCILIK
Atikali Mah. Fatih Cad. No: 81 D: 2
Fatih / İstanbul
Telefon : (533) 561-2435
Takılım (Setup)
Bu bölümde bir Spring Boot uygulamasının nasıl oluşturulacağı ve çalışır duruma getirileceği gösterilmektedir. Herhangi bir geliştirme çevresi (development environment) için olanlar yerine genel, her birinde geçerli olan bilgilendirmeler verilmektedir. Konular Maven ile anlatılmaktadır. Gradle ile işlemler, Maven ile yapılanların kısa sürümü biçiminde olduğundan kolaylıkla yapılabilir.
POM
Uygulama geliştirme için Maven kullanılması durumunda pom.xml adlı bir dosya ile geliştirme yapılır. Proje ile ilgili tüm takılımlar bu dosya içinde yer alır. Proje oluşturulduktan sonra eklenecek özellikler de bu dosyaya koyulur. POM (Project Object Model - İzdüşü Nesne Tasımı), projenin bir özeti, giriş kapısı anlamına gelmektedir. Bu dosyaya göre derleme (compile), yapılama (build), koşturma (run) ve konuşlandırma (deploy) gibi işlemler yürütülür.
Ana Yapı
POM dosyasının ana yapısı aşağıdaki gibidir:
xmlns=http://maven.apache.org/POM/4.0.0
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="
http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<groupId>com.godoro
<artifactId>spring-00-test
<version>0.0.1-SNAPSHOT
<name>spring-00-test
Demo project for Spring Boot
...
<dependencies>
...
<plugins>
...
Genel Bilgilendirme (General Information)
Burada groupId (öbek özdeşliği) bu projenin de içinde olduğu ana projeyi gösterirken, artifactId (yapaylık özdeşliği) ise bu projenin kendisini belirti. Burada version (sürüm), her değişiklikte artırılması gereken bir bilgilendirmedir. Buna karşın name (ad) ise dışarıdan görülecek, insanlar için anlamlı bir sicimdir. POM dosyasında properties (özellikler) ile gerektiğinde kullanılacak bilgilendirmeler verilir.
Bağımlılıklar (Dependencies)
Dosyadaki dependencies (bağımlılıklar), projenin kullandığı başka projeleri ve betiklik (library) ya da bohça (package) adı verilen birimleri gösterir. Kullanılan her birim, dependency (bağımlılık) öğesiyle bildirilir. Örneğin Spring Boot araçlarından Spring Boot Web adlı betiklik kullanılacaksa aşağıdaki gibi bir bağımlılık girilir:
<dependency>
Yapılama (Build) & Eklentiler (Plugins)
POM içindeki build (yapılama) bölümündeki içerik, geliştirme aşamasında yapılacak işlemlerle ilgili öğelerdir. Dosyadaki plugins (eklentiler) bölümünde ise plugin (eklenti) öğeleriyle, geliştirme çevresine yardımcı olacak öğeler bildirilir. Burada spring-boot-maven-plugin adlı olanı, Spring ile Maven arasındaki köprüyü kurar. Başka bir deyişle, Maven yapılama aracına Spring için kullanılan buyrukları ekler.
POM dosyalarında eklenti (plugin) ile bağımlılık (dependency) arasındaki ayrım kimce kullanılacağıyla ilgilidir. Bunlardan bağımlılık, geliştiricinin kullanmak istediği Java gibi dillerde doğrudan başvuru yapacağı birimlerdir. Öte yandan eklenti ise Eclipse gibi bir çevre üzerine kurulu Spring Tools Suite (Spring Araçları Takımı) için gerekli olan buyruklardır. Bunlar yalnızca geliştirme aşamasında kullanılırlar.
Örnek
Aşağıdaki pom.xml dosyası uygulamanın Maven ile yapılatılmasını sağlar:
1.0 encoding=UTF-8
?>
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="
http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
spring-boot-starter-parent
<groupId>com.godoro
<artifactId>spring-00-test
<version>0.0.1-SNAPSHOT
<name>spring-00-test
Demo project for Spring Boot
<java.version>17
<dependencies>
<dependency>
<dependency>
<dependency>
<plugins>
<plugin>
spring-boot-maven-plugin
Uygulama (Application)
Bu bölümde Spring Boot çatımlamasıyla yapılan uygulamaların çalışma biçimi anlatılmaktadır.
Gömülü (Embedded) Tomcat
Spring Boot uygulamaları web (örün) üzerinden çalışsalar da olağan bir konsol (console) uygulaması olarak yapılandırılırlar. Bunun nedeni Tomcat adlı uygulama işgörücüsü (application server) yazılımının Spring içine gömülü olmasıdır. Bir sınıf @SpringBootApplication (Spring Boot Uygulaması) adlı açımlama (annotation) ile imlendirilip main() (ana) işlevinde SpringApplication adlı sınıfın run() (koştur) işlevi sınıf ile aşağıdaki gibi
SpringApplication.run(
Spring00TestApplication.class, args);
çağrılırsa, o bir uygulama olur.
Örnek
Projedeki ana (main) işlevi içeren uygulama (application) sınıfı aşağıdaki gibidir:
package com.godoro.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure
.SpringBootApplication;
@SpringBootApplication
public class Spring00TestApplication {
public static void main(String[] args) {
SpringApplication.run(
Spring00TestApplication.class, args);
}
}
Özel bir değişiklik olmadıkça böyle sınıfın her projede olduğu var sayılıp yeniden anlatılmayacaktır.
Çalıştırma (Run)
Uygulama çalıştığında aşağıdaki gibi bir konsol çıktısı üretir:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.1)
2022-07-15 11:30:00.494 INFO 17828 --- [ main] com.godoro.test.Spring00TestApplication : Starting Spring00TestApplication using Java 17.0.3 on DESKTOP-SB3OC6Q with PID 17828 (D:\Godoro\Examples\JavaEnterprise\SpringBoot\workspace\spring-00-test\target\classes started by Godoro in D:\Godoro\Examples\JavaEnterprise\SpringBoot\workspace\spring-00-test)
2022-07-15 11:30:00.497 INFO 17828 --- [ main] com.godoro.test.Spring00TestApplication : No active profile set, falling back to 1 default profile: "default"
2022-07-15 11:30:01.213 INFO 17828 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-07-15 11:30:01.223 INFO 17828 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-07-15 11:30:01.223 INFO 17828 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.64]
2022-07-15 11:30:01.309 INFO 17828 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-07-15 11:30:01.309 INFO 17828 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 766 ms
2022-07-15 11:30:01.616 INFO 17828 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-07-15 11:30:01.624 INFO 17828 --- [ main] com.godoro.test.Spring00TestApplication : Started Spring00TestApplication in 1.46 seconds (JVM running for 2.065)
Başlatma (Start) & Başlandırma (Restart)
Uygulama bir kez çalıştırıldıktan sonra yeninden çalıştırılmaya çalışılırsa konsolda yanlışlık bildirimi gösterilir:
***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8080 was already in use.
Action:
Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.
Bunun anlamı başlatma (start) işleminin başarısız olmasıdır. Burada 80 sayılı kapıda başka bir uygulama olduğundan yakınılmaktadır. Eskisi durdurulup yenisi başlatılmalıdır. Ya da başlandırma (restart) ya da yeniden ortaya sürme (relaunch) gibi bir araçla durdurup başlatma yapılmalıdır.
Denetleyici (Controller)
En yalın uygulama için denetleyici (controller) sınıfı yaratılabilir. Buna MVC için kullanılan denetleyici yazılarak ekranda bir sonuç gösteren bir parça düzgü yazılabilir. Bir sınıfın örün (web) üzerinden erişilebilmesi için @Controller (Denetleyici) adlı açımlama (annotation) kullanılabilir. Örnek:
@Controller
public class TestController {
}
Yöntem (Method)
HTTP adı verilen önkurallık (protocol), erişim için kullanılan, adına yöntem (method) denen bir takım eylemleri desteklemektedir. Bunların her biri için bir denetleyici sınıfında bir yöntem (method) yazılabilir. Hem HTTP eylemlerine hem de Java işlevlerine yöntem denildiğinden bunlar birbiriyle karıştırılmamalıdır. HTTP yöntemleri GET (Edin), POST (Yolla), PUT (Koy) ve DELETE (Sil) gibi adlar taşırlar.
Eşlemleme (Mapping)
Yazılan her Java yöntemi ile HTTP yöntemi arasındaki ilişki kurmak için mapping (eşlemleme) yapılması gerekir. Bunun için bir takım açımlama (annotation) öğeleri bulunmaktadır. Örneğin @GetMapping (Edinme Eşlemleme) adlı olan, GET (Edinme) yöntem için eşlemleme yapar:
@GetMapping( ... )
public String getTest() {
...
}
Yolak (Path)
Eşlemleme açımlamasına yolak (path) bilgisi verilir. HTTP üzerinden uygulamaya erişen herhangi bir istemci, bu yolak bilgilendirmesini vererek söz konusu yöntemi çalıştırır. Örnek olarak, GET (Edin) yöntemi için çalışan bir yöntem aşağıdaki gibi yazılabilir:
@GetMapping( /test
)
public String getTest() {
return Sınama
;
}
Yanıt Gövdesi (Response Body)
Olağan durumlarda MVC için çalışan denetleyiciler ekranda bir görünüm (view), başka bir deyişle HTML gibi bir içerik üreten JSP gibi bir teknolojiyle çalışan bir sayfa getirirler. Ancak bu bir koşul değildir. Döndürülen değerin doğrudan istemciye içerik olarak gönderilmesi için @ResponseBody (Yanıt Gövdesi) adlı açımlama kullanılabilir. Bu durumda dönen değer bir görünüm olarak değil çıktı olarak algılanır. Kullanımı aşağıdaki gibidir:
@GetMapping( /test
)
@ResponseBody
public String getTest() {
return Sınama
;
}
Örnek
Aşağıda sınama (test) amaçlı kullanılan bir denetleyici (controller) sınıfı yer almaktadır:
package com.godoro.test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation
.GetMapping;
import org.springframework.web.bind.annotation
.ResponseBody;
@Controller
public class TestController {
@GetMapping( /test
)
@ResponseBody
public String getTest() {
return Sınama
;
}
}
Eğer gözatıcı (browser) uygulamasının adres çubuğuna ilgili URL aşağıdaki gibi
http://localhost:8080/test
biçiminde yazılırsa ekran çıktısı aşağıdaki gibi olur:
grafikler1Eşlemleme (Mapping)
Bir yolak (path) ile Java sınıfındaki bir yöntem (method) arasında ilişki kurulmasına eşlemleme (mapping) adı verilir. Kimi durumlarda dışarıdan erişilen yolak için uçdoğrultu (endpoint) sözcüğü kullanılır. Bu da istemci yakasından bağlanılacak nokta anlamı taşımaktadır.
İstek Eşlemleme (Request Mapping)
Tüm yöntemler için çalışan, @RequestMapping (İstek Eşlemleme) adlı bir açımlama bulunmaktadır. Bunda ki path (yolak) özniteliğinde örün üzerinden erişim sağlanırken kullanılan göreli adres verilir. Bunun dışında method (yöntem) adlı özniteliğe HTTP önkurallığındaki yöntem adlarından birisi, RequestMethod (İstek Yöntemi) adlı sayılandırma (enum) içerisindeki değerlerden birisi verilebilir. Örnek bir yöntem aşağıdaki gibi yapılabilir:
@RequestMapping(
path=/mypath
, method=RequestMethod.GET)
@ResponseBody
public String getValue() {
return Değer
;
}
Yolak (Path)
Bir eşlemlemede yolak (path) içine yazılabilecekler URI (Uniform Resource Indicator - Tekbiçim Özkaynak Göstergeleyici) ölçününe göre yapılır. Bu ölçün URL ile büyük ölçüde benzer olsa da belli bir dosyaya karşılık gelmeyebilme özelliği bulunmaktadır. Başka bir deyişle, URL varsa karşıda bir dosya olmalıdır ancak URI varsa dosya olması koşul değildir. Bu da REST tekniğine uygundur. Öte yandan, bir çok durum URL ya da URI ayrımı yapılmaz ve tümüne birden, çok bilindiği için URL adı verilir.
Bir yolak (path) içindeki tüm özyapı (character) değerleri önemlidir. Örneğin sondaki / (bölü - slash) imi ayrı bir yolak oluşturur. Buna göre aşağıdaki iki yolak aynı değildir:
/mypath
/mypath/
Birisi için yapılan eşlemleme ötekisi için çalışmaz.
İstek Yöntemi (Request Method)
Eşlemleme açımlamasına verilebilecek yöntem değerlerini barındıran sayılandırma (enum) aşağıdaki değerleri içerir:
GET(Edinme)
POST(Yollama)
PUT (Koyma)
DELETE (Silme)
HEAD (Baş)
PATCH(Yama)
OPTIONS(Seçenekler)
TRACE(İzlendirme)
Bunlardan ilk dördü temel işlemler için kullanılır. Örneğin GET (Edinme), istemcinin karşı yakadan veri istediği durumlarda; POST (Yolllama) karşı yakaya yeni veri gönderildiğinde kullanılır. Öte yandan PUT (Koy) ise var olan bir içeriği güncellemek için çağrılır. Son olarak DELETE (Sil) ise bir özkaynağın giderilmesi için kullanılır.
Öteki seçeneklerden HEAD (BAŞ), içerik vermeden ya da almadan, yalnızca özkaynak ile ilgili bilgilendirmeler içeren başlık (header) değerlerin gönderilmesi ve alınması için kullanılır. Bunun nedenlerinden birisi, özellikle büyük verilerde gereksiz yere içeriği almamak ve yalnıza genel bilgilendirme edinmek için olabilir. Yöntemlerden PATCH (Yama), PUT (Koy) gibi çalışır ancak bütün nesneyi güncellemek için değil yalnızca bir kaç tarlasını değiştirmek amacıyla kullanılır. Yöntemlerden OPTIONS (Seçenekler) ise bir özkaynak üzerinden yapılabilecek işlemleri öğrenmek için; TRACE (İzle) ise bir özkaynağa erişmek için hangi yollardan, hangi bilgisayarlardan ya da işgörücülerden geçilerek erişim yapıldığını öğrenmek içindir.
Kısa Açımlamalar
Yukarıda sözü edilen @RequestMapping (İstek Eşlemleme) açımlamasını yazılması biraz uzun olduğu için sık kullanılan yöntem (method) seçenekleri için ayrı bir açımlama yapılmıştır. Örneğin @GetMapping (Edinme Eşleme) ve @PostMapping (Yollama Eşlemleme) bu durumda aşağıdaki gibi
@RequestMapping(
path=/mypath
,method=RequestMethod.GET)
yazmak gerine daha kısa bir biçimde şöyle eşlemleme yapılabilir:
@GetMapping(/mypath
)
Sınıf Eşlemleme (Class Mapping)
Bir sınıftaki her yöntemin başına bir yolak (path) eklemek için @RequestMapping (İstek Eşlemleme) açımlaması kullanılabilir. Örnek:
@Controller
@RequestMapping(/parent
)
public class PathController {
@GetMapping(/child
)
@ResponseBody
public String getChild() {
return Çocuk
;
}
}
Bu durumda istek aşağıdaki gibi yolak için yapılır:
/parent/child
Öte yandan, sınıfa ana-baba vermek yerine yöntemde iki bölüm de verilebilir. Örnek:
@GetMapping(/parent/child
)
Ancak bu durumda sınıftaki her yönteme öntakı vermek gerekmektedir.
Örnek
Aşağıdaki örnekte istek eşlemleme (request mapping) ile ilgili konular içeren bir denetleyici (controller) bulunmaktadır:
@Controller
@RequestMapping(/root
)
public class PathController {
@GetMapping(/short
)
@ResponseBody
public String getShort() {
return Kısa
;
}
@RequestMapping(
path=/long
,method=RequestMethod.GET)
@ResponseBody
public String getLong() {
return Uzun
;
}
}
Bir gözatıcıda aşağıdaki adresi girelim: