← Kursa Dön
📄 Text · 15 min

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-repo

Ne 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, @Secured

  • CSRF, 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?

SenaryoKullanılacak Proje
REST API geliştirmeSpring Boot + Spring Web
Veritabanı işlemleriSpring Data JPA/MongoDB
Kimlik doğrulamaSpring Security
Mikroservis mimarisiSpring Cloud
Büyük veri işlemeSpring Batch
Sistem entegrasyonuSpring Integration
Yüksek eşzamanlılıkSpring WebFlux
Dağıtık sessionSpring 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.