Spring Ekosistemi
Giriş
Spring sadece bir framework değil, başlı başına bir ekosistemdir. Web uygulamalarından mikroservislere, güvenlikten batch işleme'ye kadar Java dünyasının hemen her ihtiyacını karşılayan projeler barındırır. Bu derste Spring ekosisteminin ana bileşenlerini, her birinin ne işe yaradığını ve hangi senaryoda hangisini seçmeniz gerektiğini öğreneceğiz.
Spring Boot
Spring Boot, ekosistemin merkezidir. Diğer tüm Spring projelerini kolayca kullanmanızı sağlar.
Ne yapar: Auto-configuration, starter dependencies, embedded server
Ne zaman kullanılır: Her yeni Spring projesi Spring Boot ile başlar
Önemli özellikler: Actuator (monitoring), DevTools (hot reload), CLI
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}Spring Cloud
Mikroservis mimarisi için dağıtık sistem araçları sunar:
Service Discovery: Eureka, Consul entegrasyonu — servislerin birbirini bulması
API Gateway: Spring Cloud Gateway — tek giriş noktası, routing, rate limiting
Config Server: Merkezi konfigürasyon yönetimi (Git-backed)
Circuit Breaker: Resilience4j entegrasyonu — hata toleransı
Load Balancer: Spring Cloud LoadBalancer — client-side yük dengeleme
# application.yml — Config Server örneği
spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/config-repoNe zaman kullanılır: Birden fazla mikroservisiniz varsa ve bunların birbirleriyle koordineli çalışması gerekiyorsa.
Spring Security
Java uygulamalarında kimlik doğrulama (authentication) ve yetkilendirme (authorization) sağlar:
HTTP Basic, Form Login, OAuth 2.0, JWT, SAML
Method-level security:
@PreAuthorize,@SecuredCSRF, CORS, XSS korumaları
Spring Boot ile otomatik konfigürasyon
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/public/**").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
}Ne zaman kullanılır: Hemen hemen her production uygulamada. Güvenlik olmazsa olmazdır.
Spring Data
Veri erişim katmanını dramatik şekilde basitleştirir:
Spring Data JPA: Hibernate üzerinde repository pattern
Spring Data MongoDB: MongoDB NoSQL desteği
Spring Data Redis: Redis cache/store
Spring Data Elasticsearch: Arama motoru entegrasyonu
// Sadece interface tanımlayın — implementasyon otomatik!
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
Optional<User> findByEmail(String email);
@Query("SELECT u FROM User u WHERE u.age > :age")
List<User> findUsersOlderThan(@Param("age") int age);
}Ne zaman kullanılır: Veritabanı ile çalışan her uygulamada.
Spring Batch
Büyük hacimli toplu işleme (batch processing) için tasarlanmıştır:
Chunk-based processing: okuma → işleme → yazma
Job scheduling, restart, skip, retry mekanizmaları
Paralel ve partitioned işleme
Ne zaman kullanılır: CSV import/export, raporlama, veri göçü, ETL işlemleri.
Spring Integration
Enterprise Integration Patterns (EIP) implementasyonudur:
Message channels, routers, transformers, adapters
Dosya, FTP, JMS, AMQP, MQTT, Email entegrasyonları
Lightweight messaging framework
Ne zaman kullanılır: Farklı sistemler arası entegrasyon gerektiğinde (dosya okuma, mesaj kuyruğu, email gönderme).
Spring WebFlux
Reactive programming modeli ile non-blocking web uygulamaları geliştirmek için:
Mono (0 veya 1 eleman) ve Flux (0-N eleman) türleri
Netty tabanlı, event-loop mimarisi
Functional endpoints desteği
Yüksek eşzamanlılık (concurrency) gerektiren senaryolar için
@RestController
public class UserController {
@GetMapping("/users")
public Flux<User> getUsers() {
return userService.findAll(); // Non-blocking!
}
@GetMapping("/users/{id}")
public Mono<User> getUser(@PathVariable Long id) {
return userService.findById(id);
}
}Ne zaman kullanılır: Yüksek eşzamanlı bağlantı (streaming, real-time), düşük latency gereksinimleri.
Spring Session
HTTP session yönetimini merkezi hale getirir:
Redis, JDBC veya Hazelcast üzerinde session saklama
Birden fazla uygulama sunucusu arasında session paylaşımı
Cluster ortamlarında sticky session ihtiyacını ortadan kaldırır
Ne zaman kullanılır: Birden fazla sunucuya dağıtılmış uygulamalarda session tutarlılığı gerektiğinde.
Hangi Projeyi Ne Zaman Seçmeli?
| Senaryo | Kullanılacak Proje |
|---|---|
| REST API geliştirme | Spring Boot + Spring Web |
| Veritabanı işlemleri | Spring Data JPA/MongoDB |
| Kimlik doğrulama | Spring Security |
| Mikroservis mimarisi | Spring Cloud |
| Büyük veri işleme | Spring Batch |
| Sistem entegrasyonu | Spring Integration |
| Yüksek eşzamanlılık | Spring WebFlux |
| Dağıtık session | Spring Session |
Best Practices
İpucu: Başlangıçta Spring Boot + Spring Web + Spring Data JPA üçlüsüne odaklanın. Diğer projeleri ihtiyaç duydukça öğrenin.
Uyarı: Her projeye mikroservis veya reactive programlama uygulamayın. Monolitik bir yapı çoğu durumda daha basit ve yönetilebilirdir.
Özet
Spring ekosistemi, Java ile uygulama geliştirmenin hemen her alanını kapsar. Önemli olan, her aracın ne zaman kullanılacağını bilmek ve gereksiz karmaşıklıktan kaçınmaktır.
AI Asistan
Sorularını yanıtlamaya hazır