Spring Boot Neden Var?
Giriş
Spring Framework güçlü bir çatı olmasına rağmen, bir projeyi sıfırdan kurmak hâlâ zahmetliydi. XML konfigürasyonları, dependency yönetimi, uygulama sunucusu ayarları… Spring Boot, 2014 yılında tüm bu zorlukları ortadan kaldırmak için doğdu. Bu derste Spring Boot'un felsefesini, sağladığı kolaylıkları ve tarihsel gelişimini inceleyeceğiz.
Convention over Configuration
Spring Boot'un temel felsefesi "Convention over Configuration" (Konfigürasyon yerine Konvansiyon) ilkesidir. Yani framework, en yaygın kullanım senaryoları için mantıklı varsayılan ayarlar (opinionated defaults) sunar. Siz sadece varsayılandan farklı olan kısımları belirtirsiniz.
# Spring Boot İLE: Sadece varsayılandan farklı olanı yaz
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
# Spring Boot OLMADAN: Her şeyi tek tek konfigüre et
# - DataSource bean tanımı
# - TransactionManager bean tanımı
# - EntityManagerFactory bean tanımı
# - ViewResolver bean tanımı
# - DispatcherServlet mapping
# ... ve daha onlarcasıStarter Dependencies
Spring Boot starter bağımlılıkları ile ilgili tüm kütüphaneleri tek bir dependency altında toplar. Versiyon uyumsuzluğu derdi ortadan kalkar:
<!-- Bir web uygulaması için TEK starter yeterli -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- Versiyon belirtmeye gerek yok, parent'tan gelir -->
</dependency>
<!-- Bu starter şunları otomatik getirir:
- spring-web, spring-webmvc
- jackson-databind (JSON)
- Embedded Tomcat
- spring-boot-starter-logging (Logback)
- hibernate-validator
-->Yaygın kullanılan starterlar:
spring-boot-starter-web— Web uygulamalarıspring-boot-starter-data-jpa— JPA/Hibernate ile veritabanıspring-boot-starter-security— Güvenlikspring-boot-starter-test— Test araçlarıspring-boot-starter-actuator— Monitoring/Health
Embedded Server (Gömülü Sunucu)
Geleneksel Java web uygulamalarında WAR dosyası oluşturup Tomcat/JBoss'a deploy edersiniz. Spring Boot ise sunucuyu uygulamanın içine gömer:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
// Gömülü Tomcat ile birlikte başlar!
SpringApplication.run(MyApplication.class, args);
}
}Desteklenen gömülü sunucular: Tomcat (varsayılan), Jetty, Undertow, Netty (reactive).
Fat JAR (Uber JAR)
Spring Boot, tüm bağımlılıkları tek bir fat JAR (executable JAR) içinde paketler:
# Derleme
mvn clean package
# veya
./gradlew bootJar
# Çalıştırma — bu kadar basit!
java -jar myapp-1.0.0.jarBu JAR dosyası; uygulamanızı, tüm kütüphaneleri ve gömülü sunucuyu içerir. Docker container'larında çalıştırmak da çok kolaydır.
Auto-Configuration (Otomatik Konfigürasyon)
Spring Boot, classpath'teki kütüphaneleri tarayarak otomatik konfigürasyon yapar:
Classpath'te H2 var mı? → Otomatik in-memory DataSource oluştur
Classpath'te Spring MVC var mı? → DispatcherServlet ayarla
Classpath'te JPA var mı? → EntityManagerFactory oluştur
// @SpringBootApplication annotation'ı 3 annotation'ı birleştirir:
@SpringBootConfiguration // = @Configuration
@EnableAutoConfiguration // Otomatik konfigürasyon
@ComponentScan // Component tarama
public class MyApplication { }Spring Boot Tarihçesi
| Versiyon | Yıl | Öne Çıkanlar |
|---|---|---|
| 1.0 | 2014 | İlk sürüm: auto-config, starter, embedded server |
| 1.5 | 2017 | Actuator iyileştirmeleri, Kotlin desteği |
| 2.0 | 2018 | Spring 5 tabanlı, WebFlux, Micrometer metrics |
| 2.7 | 2022 | Son 2.x sürümü, 3.x'e geçiş rehberi |
| 3.0 | 2022 | Java 17+ zorunlu, Jakarta EE 9+, GraalVM native |
| 3.1 | 2023 | Docker Compose desteği, SSL bundle |
| 3.2 | 2023 | Virtual threads, RestClient, JdbcClient |
| 3.3 | 2024 | CDS desteği, yapılandırılmış loglama |
Spring Boot Olmadan vs Spring Boot İle
// ===== SPRING BOOT OLMADAN (web.xml + AppConfig + ...) =====
// 1) web.xml: DispatcherServlet tanımı
// 2) AppConfig.java: @EnableWebMvc, ViewResolver, MessageConverter
// 3) DataConfig.java: DataSource, EntityManager, TransactionManager
// 4) SecurityConfig.java: FilterChain tanımı
// 5) WAR paketleme + Tomcat deploy
// Toplam: ~200 satır konfigürasyon kodu
// ===== SPRING BOOT İLE =====
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
// Toplam: 6 satır + application.propertiesBest Practices
İpucu: Yeni projelerinizde her zaman Spring Boot kullanın. Raw Spring Framework ile başlamak gereksiz karmaşıklık yaratır.
Uyarı: Spring Boot "sihir" yapmaz — sadece sizin yazmanız gereken konfigürasyonları otomatik yapar. Arka planda neler olduğunu bilmek, hata ayıklamada hayat kurtarır.
Özet
Spring Boot, Spring Framework'ün gücünü koruyarak geliştirme deneyimini dramatik şekilde iyileştiren bir araçtır. Starter dependencies, embedded server, fat JAR ve auto-configuration sayesinde dakikalar içinde production-ready uygulamalar oluşturabilirsiniz.
AI Asistan
Sorularını yanıtlamaya hazır