Senior Seviye Spring & Mikroservis Mülakat Soruları

150 adet ileri seviye soru ve cevapla hazırlanmış kapsamlı arşiv

Spring Boot & Hibernate

Spring Boot ve Hibernate mülakatlarında en çok sorulan konular

Spring Boot @Transactional

@Transactional anotasyonu ile ilgili mülakat soruları ve cevapları

Mikroservis Mimarisi

25 adet ileri seviye mikroservis sorusu ve cevabı

Spring Batch

25 adet ileri seviye Spring Batch sorusu ve cevabı

Spring Caching

25 adet ileri seviye Spring Caching sorusu ve cevabı

Spring AOP & Events

25 adet ileri seviye Spring AOP & Events sorusu ve cevabı

Spring Integration

25 adet ileri seviye Spring Integration sorusu ve cevabı

Spring DevOps

25 adet ileri seviye Spring DevOps sorusu ve cevabı

Spring Boot & Hibernate

Bu dokümanda Spring Boot & Hibernate mülakatlarında en çok sorulan konular soru-cevap mantığıyla açıklanmış ve örnek kodlar eklenmiştir.

🔹 Mülakat Soru-Cevap: @Transactional Anotasyonu

❓ Soru 1: Spring'de `@Transactional` anotasyonu nedir? Ne işe yarar?

Cevap: `@Transactional`, Spring'in transaction yönetimi için kullanılan bir anotasyondur.

  • Bir metodu veya sınıfı transactional hale getirir.
  • Metod başarıyla tamamlanırsa commit, hata oluşursa rollback yapılır.

Örnek:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void registerUser(User user) {
        userRepository.save(user);
        if(user.getEmail() == null) {
            throw new RuntimeException("Email cannot be null!");
        }
    }
}

❓ Soru 2: `@Transactional` parametreleri nelerdir?

Cevap:

  • propagation → Transaction'un nasıl davranacağını belirler. (`REQUIRED`, `REQUIRES_NEW`, `NESTED` …)
  • isolation → Transaction izolasyon seviyeleri (`READ_COMMITTED`, `REPEATABLE_READ`, `SERIALIZABLE` …)
  • rollbackFor / noRollbackFor → Hangi exception durumlarında rollback yapılacağını kontrol eder.
  • readOnly → Okuma işlemleri için optimize eder.
  • timeout → Maksimum çalışma süresini belirler.

Örnek:

@Transactional(propagation = Propagation.REQUIRES_NEW,
               isolation = Isolation.REPEATABLE_READ,
               rollbackFor = Exception.class,
               timeout = 5)
public void processOrder(Order order) { ... }

🔹 Transactional dışında sıkça gelen mülakat soruları

❓ Soru 1: Entity Mapping (OneToOne, OneToMany, vs.)

Soru: `@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany` ilişkilerini açıklayın.

Cevap:

@Entity
public class User {
   @OneToOne(cascade = CascadeType.ALL)
   private Address address;

   @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
   private List<Order> orders;
}

❓ Soru 2: Fetch Type (Lazy vs Eager)

Soru: `FetchType.LAZY` ve `FetchType.EAGER` arasındaki fark nedir?

Cevap:

  • LAZY: İlişkili entity sadece çağırıldığında yüklenir.
  • EAGER: İlişkili entity her zaman yüklenir.

Örnek:

@OneToMany(fetch = FetchType.LAZY)
private List<Order> orders;

❓ Soru 3: N+1 Problem ve Çözümleri

Soru: N+1 select problemi nedir? Hibernate'de nasıl çözülür?

Cevap: N+1 problemi, ilişkili verileri çekerken her bir kayıt için ayrı bir sorgu çalıştırılmasıdır.

Çözüm:

@Query("SELECT u FROM User u JOIN FETCH u.orders")
List<User> findAllWithOrders();

❓ Soru 4: Cache Mekanizmaları

Soru: Hibernate'de 1st level cache ve 2nd level cache farkı nedir?

Cevap:

  • 1st Level Cache: Varsayılan, session bazlı.
  • 2nd Level Cache: SessionFactory seviyesinde, EhCache/Redis gibi sağlayıcılarla.

Örnek:

@Entity
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User { ... }

❓ Soru 5: Locking Stratejileri

Soru: Optimistic ve Pessimistic Locking nedir?

Cevap:

Örnek:

@Version
private Long version; // Optimistic Locking

// Pessimistic Locking
User user = entityManager.find(User.class, 1L, LockModeType.PESSIMISTIC_WRITE);

❓ Soru 6: Spring Data JPA Query Türleri

Soru: Derived Query, JPQL, Native Query farkı nedir?

Cevap:

Örnek:

// Derived Query
User findByEmail(String email);

// JPQL
@Query("SELECT u FROM User u WHERE u.email = ?1")
User findByEmailJPQL(String email);

// Native Query
@Query(value = "SELECT * FROM users WHERE email = ?1", nativeQuery = true)
User findByEmailNative(String email);

❓ Soru 7: Isolation Seviyeleri ve Veri Tutarsızlıkları

Soru: Dirty Read, Non-Repeatable Read, Phantom Read nedir?

Cevap:

  • Dirty Read: Commit edilmemiş veriyi okuma.
  • Non-Repeatable Read: Aynı satır farklı değer döndürmesi.
  • Phantom Read: Aynı sorguda farklı satır sayısı dönmesi.

Örnek:

@Transactional(isolation = Isolation.SERIALIZABLE)
public void updateBalance(...) { ... }

❓ Soru 8: Spring Boot Config, Starters, Auto-Configuration

Soru: `@SpringBootApplication` altında hangi anotasyonlar vardır?

Cevap:

  • `@Configuration`
  • `@EnableAutoConfiguration`
  • `@ComponentScan`

❓ Soru 9: Exception Handling

Soru: Spring Boot'ta global exception handling nasıl yapılır?

Cevap:

Örnek:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<String> handle(RuntimeException ex) {
        return ResponseEntity.badRequest().body(ex.getMessage());
    }
}

❓ Soru 10: AOP

Soru: AOP nedir? Hangi use-case'lerde kullanılır?

Cevap:

  • Logging
  • Security
  • Transaction Management

Örnek:

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore() {
        System.out.println("Method çağrılmadan önce loglandı");
    }
}

❓ Soru 11: Spring Security

Soru: JWT Authentication nasıl çalışır?

Cevap:

  1. Kullanıcı login olur, backend JWT token üretir.
  2. Token client tarafında saklanır.
  3. Her request'te `Authorization: Bearer ` header'ı ile gönderilir.
  4. Backend token'ı doğrular, kullanıcıya erişim izni verir.

Örnek:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    return http.csrf().disable()
            .authorizeHttpRequests()
            .requestMatchers("/api/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .build();
}

✅ Özet

Bu doküman Spring Boot & Hibernate mülakatlarında en sık karşılaşılan konuları soru-cevap ve kod örnekleri ile açıklamaktadır.

  • Transactional yönetimi
  • Entity mapping & fetch types
  • N+1 problemleri & cache
  • Locking stratejileri
  • Query türleri
  • Exception handling & AOP
  • Spring Security & JWT

Spring Boot Hibernate @Transactional Mülakat Soruları ve Açıklamaları

Bu döküman, Spring Boot ve Hibernate projelerinde sıklıkla sorulan `@Transactional` anotasyonu ile ilgili mülakat sorularını, açıklamalarını ve kod örneklerini kapsamlı olarak içermektedir.

1. @Transactional Nedir?

❓ Soru: `@Transactional` nedir? Ne işe yarar?

Cevap:

  • Spring Framework tarafından sağlanan bir transaction yönetim anotasyonudur.
  • Veritabanı üzerinde birden fazla SQL işlemi yapıldığında, hepsinin tek bir bütün olarak çalışmasını sağlar.
  • İşlem başarılı olursa commit, hata olursa rollback yapılır.
  • Hibernate ve JPA ile çalışırken veri tutarlılığını korumak için kullanılır.

Örnek Kod:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void createUserAndAccount(User user, Account account) {
        userRepository.save(user);
        if (account.getBalance() < 0) {
            throw new RuntimeException("Hatalı bakiye!");
        }
    }
}

2. @Transactional Parametreleri

2.1 Propagation

Transaction yayılım davranışını belirler. Varsayılan: Propagation.REQUIRED

Propagation Tipi Açıklama
REQUIRED Mevcut transaction varsa onu kullanır, yoksa yeni açar.
REQUIRES_NEW Her zaman yeni transaction açar. Mevcut varsa askıya alır.
MANDATORY Transaction yoksa exception fırlatır.
SUPPORTS Transaction varsa kullanır, yoksa transaction olmadan çalışır.
NOT_SUPPORTED Transaction varsa askıya alır, işlemi transaction olmadan yapar.
NEVER Transaction olmadan çalışır, eğer varsa exception atar.
NESTED Mevcut transaction içinde nested transaction açar.

Örnek Kod:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveLog(Log log) {
    logRepository.save(log);
}

2.2 Isolation

Transaction izolasyon seviyesini belirler. Kirli okuma, tekrar eden okuma ve phantom read problemlerini kontrol eder.

Isolation Seviyesi Açıklama
DEFAULT DB'nin varsayılan ayarını kullanır.
READ_UNCOMMITTED Kirli okumalara izin verir.
READ_COMMITTED Sadece commit edilmiş verileri okur.
REPEATABLE_READ Transaction boyunca aynı satırı hep aynı görür.
SERIALIZABLE En yüksek seviye, tüm transaction'lar sırayla çalışır.

Örnek Kod:

@Transactional(isolation = Isolation.SERIALIZABLE)
public void transferMoney(Long fromId, Long toId, double amount) {
    // En katı izolasyon seviyesi ile çalışır
}

2.3 rollbackFor ve noRollbackFor

rollbackFor: Belirtilen exception oluşursa rollback yapılır.
noRollbackFor: Belirtilen exception oluşursa rollback yapılmaz.

Örnek Kod:

@Transactional(rollbackFor = {IOException.class, SQLException.class})
public void riskyOperation() throws IOException {
    // IOException veya SQLException olursa rollback olur
}

@Transactional(noRollbackFor = IllegalArgumentException.class)
public void safeOperation() {
    // IllegalArgumentException olursa rollback olmaz
}

2.4 timeout

Transaction maksimum çalışma süresini (saniye cinsinden) belirler. Süre aşılırsa rollback yapılır.

Örnek Kod:

@Transactional(timeout = 5)
public void longRunningTask() {
    // 5 saniyeyi geçerse rollback olur
}

2.5 readOnly

Sorgunun sadece okuma amaçlı olduğunu belirtir. Hibernate dirty check yapmaz → performans artar.

Örnek Kod:

@Transactional(readOnly = true)
public List findAllUsers() {
    return userRepository.findAll();
}

3. @Transactional Hangi Katmanlarda Kullanılmalı?

  • En doğru kullanım Service katmanıdır.
  • Repository zaten Spring Data JPA tarafından transaction içinde çalışır.
  • Controller'da kullanılmaz.

4. @Transactional Neden Önemlidir?

  • Veri bütünlüğünü sağlar.
  • Birden fazla tabloya yazma işlemi yapılırken, tutarsız veri oluşumunu engeller.
  • Özellikle para transferi, stok güncelleme, sipariş işlemleri gibi kritik operasyonlarda hayati önem taşır.

5. Sık Karşılaşılan Problemler

  1. Checked exception rollback yapmaz → rollbackFor ile belirtilmeli.
  2. Transaction sadece public methodlarda çalışır (proxy tabanlı).
  3. Aynı sınıf içindeki metod çağrılarında transaction devreye girmez (self-invocation problemi).
  4. LazyInitializationException → transaction erken kapanırsa oluşabilir.

6. Özet

  • @Transactional → Transaction yönetimini sağlar.
  • Parametreler: propagation, isolation, timeout, readOnly, rollbackFor, noRollbackFor.
  • En iyi kullanım yeri: Service katmanı.
  • Mülakatta özellikle propagation ve isolation seviyeleri mutlaka sorulur.

7. Örnek Full Service Kullanımı

Örnek Kod:

@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private PaymentRepository paymentRepository;

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
    public void placeOrder(Order order, Payment payment) {
        orderRepository.save(order);
        paymentRepository.save(payment);

        if (payment.getAmount() <= 0) {
            throw new RuntimeException("Ödeme hatalı!");
        }
    }

    @Transactional(readOnly = true)
    public List getAllOrders() {
        return orderRepository.findAll();
    }
}

Mikroservis Mimarisi

Senior seviye mikroservis mimarisi mülakat soruları ve cevapları.

1. Mikroservislerde API Gateway neden kullanılır?

Mikroservisler birçok küçük servise bölündüğü için client doğrudan her servise çağrı yaparsa karmaşa çıkar. API Gateway tek giriş noktası sağlar, güvenlik, rate-limiting, logging, load balancing gibi işlemleri üstlenir.

Örnek: Spring Cloud Gateway kullanımı

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: http://localhost:8081
          predicates:
            - Path=/users/**

2. Mikroservislerde Service Discovery (Eureka/Consul) nasıl çalışır?

Servisler kendilerini discovery server'a register eder. Client'lar doğrudan IP bilmeden servislere ulaşır.

Kod örneği (Eureka Client):

@EnableEurekaClient
@SpringBootApplication
public class OrderServiceApp {
  public static void main(String[] args) {
    SpringApplication.run(OrderServiceApp.class, args);
  }
}

3. Mikroservislerde Circuit Breaker mantığını anlatınız.

Bir servis çökerse, sürekli retry edip sistemi yormak yerine fallback çalıştırır. Netflix Hystrix / Resilience4j ile yapılır.

Kod örneği (Resilience4j):

@CircuitBreaker(name = "inventoryService", fallbackMethod = "fallback")
public String callInventory() {
    return restTemplate.getForObject("http://inventory-service/stock", String.class);
}

public String fallback(Throwable t) {
    return "Envanter servisi şu anda kullanılamıyor";
}

4. Event Driven Architecture mikroservislerde nasıl uygulanır?

Servisler birbirini REST ile değil event/message broker (Kafka, RabbitMQ) üzerinden dinler. Loose coupling sağlar.

Kafka Listener örneği:

@KafkaListener(topics = "order-events", groupId = "payment-service")
public void consume(String message) {
    System.out.println("Gelen event: " + message);
}

5. Mikroservislerde Saga Pattern nedir?

Dağıtık transaction yönetimi için kullanılır. Örn: Sipariş oluştur → ödeme al → stok düş → hata varsa roll-back için compensating action çalışır.

6. Mikroservislerde Distributed Tracing neden önemlidir?

Mikroservislerde bir isteğin birden fazla servisi tetiklemesi sonucu sorunların kaynağı zor bulunur. Distributed tracing (Zipkin, Jaeger) ile tüm çağrılar takip edilir.

Örnek Konfigürasyon:

spring.zipkin.base-url=http://localhost:9411
spring.sleuth.sampler.probability=1

7. Mikroservislerde Load Balancing nasıl uygulanır?

Trafik birden fazla servis instance'ı arasında dengelenir. Spring Cloud LoadBalancer veya Ribbon ile uygulanabilir.

WebClient ile Load Balancing:

@Autowired
private WebClient.Builder webClientBuilder;

public String getUser() {
    return webClientBuilder.build()
            .get()
            .uri("http://user-service/users")
            .retrieve()
            .bodyToMono(String.class)
            .block();
}

8. Idempotent mikroservis tasarımı neden önemlidir?

Tekrarlanan istekler sistem üzerinde hataya neden olmamalıdır. Örn: Sipariş servisi, aynı requestId ile tekrarlandığında sadece bir kez işlenir.

9. Mikroservislerde CQRS pattern ne zaman tercih edilir?

Read ve write operasyonlarının farklı veri modelleri ve performans gereksinimleri olduğunda tercih edilir.

10. Mikroservislerde Event Sourcing ne işe yarar?

State değişiklikleri event olarak saklanır. History ve audit işlemleri kolaylaşır.

11. Mikroservislerde Config Server nasıl çalışır?

Tüm config dosyaları merkezi bir server'da tutulur.

Örnek application.yml:

spring:
  cloud:
    config:
      uri: http://localhost:8888

12. Mikroservislerde distributed transaction nasıl yönetilir?

2PC (Two-Phase Commit), Saga pattern, veya Event Sourcing kullanılarak yönetilir.

13. Mikroservislerde versioning nasıl yapılır?

URI versioning (/v1/users), header versioning (Accept-version: v1), veya parameter versioning (/users?version=v1) yöntemleri kullanılır.

14. Mikroservislerde authentication ve authorization nasıl yönetilir?

OAuth2, JWT, veya API Gateway üzerinde merkezi kimlik doğrulama kullanılır.

15. Mikroservislerde container orchestration araçları nelerdir?

Kubernetes, Docker Swarm, Apache Mesos gibi araçlarla container'lar yönetilir.

16. Mikroservislerde monitoring nasıl yapılır?

Prometheus, Grafana, ELK stack (Elasticsearch, Logstash, Kibana) ile monitoring yapılır.

17. Mikroservislerde log aggregation nasıl yapılır?

ELK stack, Splunk, veya Fluentd ile loglar merkezi olarak toplanır.

18. Mikroservislerde communication pattern'leri nelerdir?

Synchronous (REST, gRPC), Asynchronous (Message Queues), Event-driven communication pattern'leri kullanılır.

19. Mikroservislerde database per service pattern neden önemlidir?

Her servisin kendi veritabanına sahip olması, servislerin birbirinden bağımsız çalışmasını sağlar.

20. Mikroservislerde service mesh nedir?

Service mesh (Istio, Linkerd), servisler arası iletişimi yöneten, güvenlik, monitoring ve load balancing sağlayan bir altyapı katmanıdır.

21. Mikroservislerde blue-green deployment nasıl yapılır?

İki aynı ortam (blue ve green) hazırlanır. Trafik blue ortamından green ortamına anında yönlendirilir.

22. Mikroservislerde canary release nedir?

Yeni versiyonun küçük bir kullanıcı grubuna önce yayınlanıp, test edildikten sonra tüm kullanıcılara yayınlanmasıdır.

23. Mikroservislerde chaos engineering nedir?

Sistemin dayanıklılığını test etmek için bilinçli olarak hataların (ağ kesintisi, sunucu çökmesi vb.) enjekte edilmesidir.

24. Mikroservislerde domain-driven design (DDD) nasıl uygulanır?

İş mantığı domain modellerine bölünür, bounded context'ler oluşturulur ve her servis kendi domain sorumluluğunu taşır.

25. Mikroservislerde anti-pattern'ler nelerdir?

  • Tüm servisteki shared database kullanmak
  • Synchronous communication'a aşırı bağımlı olmak
  • Service discovery kullanmamak
  • Proper monitoring yapmamak

Spring Batch

Senior seviye Spring Batch mülakat soruları ve cevapları.

1. Spring Batch'te Chunk-Oriented Processing nedir?

Veri küçük chunk'lara bölünerek okunur, işlenir, yazılır. Bellek dostu ve büyük veriler için uygundur.

Örnek:

@Bean
public Step step() {
    return stepBuilderFactory.get("step1")
        .<String, String>chunk(100) // her seferinde 100 kayıt
        .reader(reader())
        .processor(processor())
        .writer(writer())
        .build();
}

2. Spring Batch'te JobRepository ne işe yarar?

Batch job'ların metadata'sını (başlama, bitiş, status, exitCode) saklar. Restart mekanizması buradan yönetilir.

3. Spring Batch'te Job Parameter neden önemlidir?

Aynı job farklı parametrelerle yeniden çalıştırılabilir. Parametre verilmezse "job instance already exists" hatası alınır.

Örnek:

JobParameters params = new JobParametersBuilder()
        .addString("date", LocalDate.now().toString())
        .toJobParameters();
jobLauncher.run(job, params);

4. Spring Batch'te Restartable Jobs nasıl yapılır?

Step başarısız olursa aynı parametreyle tekrar başlatılabilir. JobRepository geçmiş durumları track eder.

5. Spring Batch'te Partitioning & Parallel Steps nedir?

Büyük datayı bölerek çoklu thread ile işler. Ölçeklenebilirlik sağlar.

6. Spring Batch'te Skip Logic nasıl çalışır?

Hatalı item atlanabilir ve job çalışmaya devam eder.

Örnek:

.step("step")
.<String, String>chunk(10)
.faultTolerant()
.skip(Exception.class)
.skipLimit(5)
.reader(reader())
.processor(processor())
.writer(writer())
.build();

7. Spring Batch'te Retry Logic nasıl uygulanır?

Geçici hatalarda item tekrar denenebilir.

Örnek:

.faultTolerant()
.retry(Exception.class)
.retryLimit(3)

8. Spring Batch'te Job Listener nasıl eklenir?

Job başlangıcı ve bitişi için listener eklenir.

Örnek:

public class JobCompletionNotificationListener extends JobExecutionListenerSupport {
    @Override
    public void afterJob(JobExecution jobExecution) {
        if(jobExecution.getStatus() == BatchStatus.COMPLETED) {
            System.out.println("Job tamamlandı");
        }
    }
}

9. Spring Batch'te Parallel Step nasıl uygulanır?

Step'ler parallel olarak çalıştırılır.

Örnek:

@Bean
public Job parallelJob() {
    return jobBuilderFactory.get("parallelJob")
            .start(step1())
            .split(new SimpleAsyncTaskExecutor()).add(step2(), step3())
            .end()
            .build();
}

10. Spring Batch'te JobIncrementer neden gereklidir?

Aynı job parametreleri ile tekrar çalıştırılabilmesi için unique parametre gerekir.

Örnek:

.incrementer(new RunIdIncrementer())

11. Spring Batch'te Partitioning nasıl yapılır?

Büyük veri setlerini paralel işlemek için Partitioning kullanılır.

Örnek:

@Bean
public Step partitionedStep(StepBuilderFactory stepBuilderFactory, Step slaveStep, TaskExecutor taskExecutor) {
    return stepBuilderFactory.get("partitionedStep")
            .partitioner("slaveStep", new ColumnRangePartitioner())
            .step(slaveStep)
            .taskExecutor(taskExecutor)
            .build();
}

12. Spring Batch'te Remote Chunking nedir?

Chunk'lar farklı worker node'lara dağıtılır. Büyük veri paralel işlenir.

13. Spring Batch'te Job restart nasıl yapılır?

Spring Batch job'ları durduğu yerden devam edebilir. Bunun için JobRepository durum bilgisini tutar.

Komut:

java -jar batch-job.jar --spring.batch.job.names=job1

14. Spring Batch'te Skip Policy nedir?

Hangi exception'ların atlanacağını belirler.

Örnek:

@Bean
public SkipPolicy skipPolicy() {
    return (t, count) -> t instanceof FlatFileParseException;
}

15. Spring Batch'te Flow Execution nedir?

Bir batch job'un farklı step akışlarını kontrol eder.

Örnek:

@Bean
public Job flowJob(JobBuilderFactory jobs, Step step1, Step step2) {
    return jobs.get("flowJob")
            .start(step1)
            .next(step2)
            .end()
            .build();
}

16. Spring Batch'te JobLauncher nedir?

Job'ları başlatmak için kullanılan arayüz.

17. Spring Batch'te ItemProcessor ne işe yarar?

Okunan veriyi işleyip yazıma hazır hale getirir.

18. Spring Batch'te ItemReader ve ItemWriter arasındaki fark nedir?

ItemReader veriyi okur, ItemWriter veriyi hedefe yazar.

19. Spring Batch'te ValidatingItemProcessor nedir?

Veriyi doğrulamak için kullanılan processor.

20. Spring Batch'te CompositeItemProcessor nasıl kullanılır?

Birden fazla processor'ı birleştirmek için kullanılır.

21. Spring Batch'te JobExecution decider nedir?

Job akışını koşullara göre yönlendirmek için kullanılır.

22. Spring Batch'te FlatFileItemReader nasıl yapılandırılır?

Dosyadan veri okumak için kullanılır.

23. Spring Batch'te JdbcCursorItemReader ne işe yarar?

Veritabanından cursor ile veri okumak için kullanılır.

24. Spring Batch'te MultiResourceItemReader nedir?

Birden fazla kaynaktan (dosya) veri okumak için kullanılır.

25. Spring Batch'te best practices nelerdir?

  • Job ve Step'leri modüler tutmak
  • Retry ve Skip mekanizmalarını kullanmak
  • Partitioning ile paralel işlem yapmak
  • Job parametrelerini doğru yönetmek
  • Listener'lar ile job yaşam döngüsünü yönetmek

Spring Caching

Senior seviye Spring Caching mülakat soruları ve cevapları.

1. Spring Cache'de @Cacheable ve @CacheEvict farkı nedir?

  • @Cacheable → Sonuç cache'e kaydedilir.
  • @CacheEvict → Cache temizlenir.

Örnek:

@Cacheable("users")
public User getUser(Long id) { ... }

@CacheEvict(value = "users", allEntries = true)
public void clearCache() { }

2. Spring Cache'de @CachePut ne işe yarar?

@CachePut metot çalıştıktan sonra sonucu cache'e günceller.

Örnek:

@CachePut(value="users", key="#user.id")
public User updateUser(User user) {
    return repository.save(user);
}

3. Spring Cache'de Redis nasıl kullanılır?

Redis cache provider olarak eklenir.

application.yml:

spring:
  cache:
    type: redis
  redis:
    host: localhost
    port: 6379

4. Spring Cache'de TTL (Time to Live) nasıl ayarlanır?

Redis veya caffeine cache'de entry süreli saklanır.

Örnek (Caffeine):

@Bean
public CaffeineCacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager("users");
    cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES));
    return cacheManager;
}

5. Spring Cache'de @Caching nasıl kullanılır?

Birden fazla cache anotasyonu gruplamak için kullanılır.

Örnek:

@Caching(
  put = { @CachePut(value="users", key="#user.id") },
  evict = { @CacheEvict(value="allUsers", allEntries=true) }
)
public User updateUser(User user) { ... }

6. Spring Cache'de condition parametresi nasıl çalışır?

Koşul sağlandığında caching yapılır.

Örnek:

@Cacheable(value = "users", key = "#id", condition = "#id > 10")
public User getUser(Long id) { ... }

7. Spring Cache'de Cache Stampede problemi nedir?

Aynı anda cache miss olduğunda çok sayıda isteğin DB'ye yönlenmesi. Çözüm: @Cacheable(sync = true) veya locking mekanizması.

8. Spring Cache'de Key Generator nasıl özelleştirilir?

Default key generation yerine custom key generator yazılabilir.

Örnek:

@Bean
public KeyGenerator customKeyGenerator() {
    return (target, method, params) -> method.getName() + "_" + Arrays.toString(params);
}

9. Spring Cache'de Multi-level Cache nedir?

Local memory + Distributed cache kombinasyonu. Sık erişilen data local cache'de, nadiren erişilen distributed cache'de tutulur.

10. Spring Cache'de Redis vs Caffeine farkları nedir?

  • Redis: Dağıtık cache, büyük ölçekli projeler için.
  • Caffeine: Bellek içi cache, düşük latency ve küçük ölçek için.

Caffeine Örneği:

@EnableCaching
@Configuration
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        return new CaffeineCacheManager("users");
    }
}

11. Spring Cache'de @CacheEvict stratejileri nelerdir?

  • allEntries = true → tüm cache silinir.
  • beforeInvocation = true → metot çalışmadan önce cache temizlenir.

Örnek:

@CacheEvict(value = "users", allEntries = true)
public void clearUsersCache() { }

12. Spring Cache'de Conditional Eviction nasıl yapılır?

Koşul sağlandığında cache temizlenir.

Örnek:

@CacheEvict(value = "users", key = "#id", condition = "#id > 10")
public void removeUser(Long id) { }

13. Spring Cache'de Cache Statistics nasıl alınır?

Caffeine veya EhCache ile hit/miss metric izlenebilir.

14. Spring Cache'de Distributed Cache neden önemlidir?

Çoklu instance çalışan mikroservislerde, local cache senkron kalmaz. Redis gibi merkezi cache ile consistency sağlanır.

15. Spring Cache'de Cache Manager nedir?

Cache'leri yöneten merkezi bileşendir. Farklı cache sağlayıcıları (Redis, Caffeine, EhCache) için farklı implementasyonları vardır.

16. Spring Cache'de @Cacheable anotasyonunun sync parametresi ne işe yarar?

Cache miss durumunda sadece bir thread'in veritabanına gitmesini sağlar. Diğer thread'ler bu işlem bitene kadar bekler.

17. Spring Cache'de unless parametresi ne işe yarar?

Method sonucuna göre caching yapılıp yapılmayacağını belirler. Koşul sağlanırsa caching yapılmaz.

Örnek:

@Cacheable(value = "users", unless = "#result.age < 18")
public User getUser(Long id) { ... }

18. Spring Cache'de CacheResolver nedir?

Runtime'da hangi cache'in kullanılacağını belirleyen bileşendir.

19. Spring Cache'de CacheConfig nasıl yapılandırılır?

Cache ayarlarını merkezi olarak yapılandırmak için kullanılır.

20. Spring Cache'de @EnableCaching anotasyonu ne işe yarar?

Spring caching mekanizmasını aktive eder.

21. Spring Cache'de Cache Eviction için @Scheduled kullanımı?

Zamanlanmış görevlerle cache temizlenebilir.

Örnek:

@Scheduled(fixedRate = 60000)
@CacheEvict(value = "users", allEntries = true)
public void clearCachePeriodically() { }

22. Spring Cache'de Hazelcast nasıl entegre edilir?

Hazelcast bağımlılığı eklenir ve cache manager yapılandırılır.

23. Spring Cache'de EhCache nasıl kullanılır?

EhCache bağımlılığı eklenir ve yapılandırma dosyası oluşturulur.

24. Spring Cache'de Cache Invalidation nasıl yönetilir?

Veri güncellendiğinde veya silindiğinde cache'in temizlenmesi gerekir. @CacheEvict anotasyonu ile bu sağlanır.

25. Spring Cache'de best practices nelerdir?

  • Doğru cache sağlayıcısını seçmek (Redis, Caffeine, vb.)
  • Cache key'lerini özelleştirmek
  • Cache boyutunu ve TTL'yi doğru ayarlamak
  • Cache invalidation stratejileri oluşturmak
  • Cache performansını monitor etmek

Spring AOP & Events

Senior seviye Spring AOP & Events mülakat soruları ve cevapları.

1. Spring AOP ile method execution logging nasıl yapılır?

Aspect tanımlanır, @Around ile method öncesi/sonrası log tutulur.

Örnek:

@Aspect
@Component
public class LoggingAspect {
    @Around("execution(* com.app.service.*.*(..))")
    public Object log(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("Before: " + pjp.getSignature());
        Object result = pjp.proceed();
        System.out.println("After: " + pjp.getSignature());
        return result;
    }
}

2. Spring Event mekanizması nasıl çalışır?

Event yayınlayan (ApplicationEventPublisher) ve dinleyen (@EventListener) bileşenler vardır.

Örnek:

// Event
public class UserCreatedEvent extends ApplicationEvent {
    public UserCreatedEvent(User user) { super(user); }
}

// Publisher
publisher.publishEvent(new UserCreatedEvent(user));

// Listener
@EventListener
public void handleUserCreated(UserCreatedEvent event) {
    System.out.println("Yeni kullanıcı: " + event.getSource());
}

3. Spring AOP'de Pointcut nedir?

Hangi methodların intercept edileceğini tanımlar.

Örnek:

@Pointcut("execution(* com.app.service.*.*(..))")
public void serviceMethods(){}

4. Spring AOP ile Transaction Management nasıl uygulanır?

AOP proxy mekanizması ile @Transactional anotasyonu çalışır.

5. Spring Events ile Domain Event nasıl tasarlanır?

Domain olayları event olarak yayınlanır ve diğer servisler bu olaylara tepki verir.

Örnek:

public class OrderCreatedEvent extends ApplicationEvent {
    private final String orderId;
    public OrderCreatedEvent(Object source, String orderId) {
        super(source);
        this.orderId = orderId;
    }
}

// Publisher
applicationEventPublisher.publishEvent(new OrderCreatedEvent(this, "1234"));

6. Spring AOP'de Advice türleri nelerdir?

  • Before: Method öncesi
  • AfterReturning: Method başarıyla bitince
  • AfterThrowing: Exception olunca
  • Around: Method öncesi & sonrası

7. Spring Events ile asenkron event işleme nasıl yapılır?

@Async ile event listener asenkron hale getirilir.

Örnek:

@Async
@EventListener
public void handleEvent(OrderCreatedEvent event) {
    System.out.println("Async event: " + event.getOrderId());
}

8. Spring AOP ile Security kontrolü nasıl yapılır?

Method çağrısından önce kullanıcı rolü kontrol edilebilir.

9. Spring Events ile transactional event listener nasıl çalışır?

Event sadece transaction commit edildikten sonra publish edilir.

Örnek:

@TransactionalEventListener
public void handleAfterCommit(OrderCreatedEvent event) {
    System.out.println("Commit sonrası event işlendi.");
}

10. Spring AOP'de JoinPoint nedir?

Intercept edilebilecek method çağrı noktasıdır.

11. Spring AOP ile Performance Monitoring nasıl yapılır?

Method çalıştırma süresi ölçülür ve loglanır.

Örnek:

@Around("execution(* com.example.service.*.*(..))")
public Object monitor(ProceedingJoinPoint pjp) throws Throwable {
    long start = System.currentTimeMillis();
    Object retVal = pjp.proceed();
    long time = System.currentTimeMillis() - start;
    System.out.println(pjp.getSignature() + " çalıştı: " + time + "ms");
    return retVal;
}

12. Spring AOP ile Exception Handling nasıl yapılır?

AfterThrowing advice ile exception loglanabilir veya yönetilebilir.

Örnek:

@AfterThrowing(pointcut = "execution(* com.app.service.*.*(..))", throwing = "ex")
public void logException(Exception ex) {
    System.out.println("Hata yakalandı: " + ex.getMessage());
}

13. Spring Events ile custom event publisher nasıl yazılır?

Özel bir event publisher sınıfı oluşturulur.

Örnek:

@Component
public class CustomEventPublisher {
    @Autowired
    private ApplicationEventPublisher publisher;
    public void publish(String message) {
        publisher.publishEvent(new CustomEvent(this, message));
    }
}

14. Spring AOP'de Pointcut Expression nasıl yazılır?

Farklı desenlerle method seçimi yapılabilir.

Örnek:

@Pointcut("execution(* com.app.service.*.*(..))")
public void serviceLayer() { }

@Pointcut("within(com.app.controller..*)")
public void controllerLayer() { }

15. Spring Events ile conditional event handling nasıl yapılır?

@EventListener anotasyonuna condition eklenerek event filtreleme yapılabilir.

Örnek:

@EventListener(condition = "#event.status == 'COMPLETED'")
public void handleCompleted(OrderEvent event) {
    // Sadece tamamlanmış siparişler için çalışır
}

16. Spring AOP ile method parametrelerini nasıl değiştirebiliriz?

Around advice ile method parametreleri değiştirilebilir.

Örnek:

@Around("execution(* com.app.service.*.*(..)) && args(param)")
public Object changeParameter(ProceedingJoinPoint pjp, Object param) throws Throwable {
    // Parametreyi değiştir
    Object newParam = transform(param);
    // Yeni parametre ile methodu çağır
    return pjp.proceed(new Object[]{newParam});
}

17. Spring Events ile event chaining nasıl yapılır?

Bir event işlendikten sonra başka bir event tetiklenebilir.

Örnek:

@EventListener
public void handleOrderCreated(OrderCreatedEvent event) {
    // Sipariş oluşturulduktan sonra ödeme event'i tetikle
    publisher.publishEvent(new PaymentRequestedEvent(this, event.getOrderId()));
}

18. Spring AOP'de AspectJ nedir?

AspectJ, AOP için daha güçlü bir implementasyondur. Compile time veya load time weaving yapabilir.

19. Spring Events ile event ordering nasıl sağlanır?

@Order anotasyonu ile listener'ların çalışma sırası belirlenebilir.

Örnek:

@EventListener
@Order(1)
public void handleFirst(OrderEvent event) {
    // Önce çalışacak
}

@EventListener
@Order(2)
public void handleSecond(OrderEvent event) {
    // Sonra çalışacak
}

20. Spring AOP ile custom annotation nasıl oluşturulur?

Özel bir anotasyon oluşturulur ve bu anotasyon için pointcut tanımlanır.

Örnek:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime { }

@Aspect
@Component
public class LogExecutionTimeAspect {
    @Around("@annotation(LogExecutionTime)")
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        // ...
    }
}

21. Spring Events ile generic event handling nasıl yapılır?

Generic event'ler için @EventListener kullanılabilir.

Örnek:

@EventListener
public void handleGenericEvent(ApplicationEvent event) {
    // Tüm event'leri yakalar
}

22. Spring AOP'de proxy mekanizması nasıl çalışır?

Spring AOP, dynamic proxy veya CGLIB kullanarak aspect'leri hedef method'lara bağlar.

23. Spring Events ile event filtering nasıl yapılır?

@EventListener anotasyonuna condition eklenerek event filtreleme yapılabilir.

24. Spring AOP'de weaving nedir?

Aspect'leri target object'lere bağlama işlemidir. Compile time, load time veya runtime weaving yapılabilir.

25. Spring AOP ve Events best practices nelerdir?

  • AOP için spesifik pointcut'lar kullanmak
  • Event'leri basit ve immutable tutmak
  • Asenkron event işlemlerinde hata yönetimi yapmak
  • Event'leri çok fazla zincirlememek
  • Event listener'ları test edilebilir kılmak

Spring Integration

Senior seviye Spring Integration mülakat soruları ve cevapları.

1. Spring Integration'da Message Channel nedir?

Mesajların publisher ile subscriber arasında aktığı kanaldır. QueueChannel, DirectChannel gibi tipleri vardır.

Örnek:

@Bean
public MessageChannel inputChannel() {
    return new DirectChannel();
}

2. Spring Integration'da Transformer nedir?

Mesaj payload'unu dönüştürmek için kullanılır.

Örnek:

@Transformer(inputChannel="input", outputChannel="output")
public String transform(String message) {
    return message.toUpperCase();
}

3. Spring Integration DSL ile mesaj akışı nasıl tanımlanır?

DSL ile mesaj akışları daha okunabilir şekilde tanımlanır.

Örnek:

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from("inputChannel")
            .filter((String s) -> s.startsWith("A"))
            .transform(String::toUpperCase)
            .channel("outputChannel")
            .get();
}

4. Spring Integration'da Router nedir?

Mesajın içeriğine göre farklı kanallara yönlendirilmesini sağlar.

5. Spring Integration'da Gateway nedir?

Java interface üzerinden messaging dünyasına geçiş sağlar.

6. Spring Integration'da Aggregator nedir?

Çoklu mesajları birleştirip tek mesaj haline getirir.

Örnek:

@Bean
public IntegrationFlow aggregatorFlow() {
    return IntegrationFlows.from("inputChannel")
            .aggregate()
            .channel("outputChannel")
            .get();
}

7. Spring Integration'da Splitter nedir?

Bir mesajı birden fazla parçaya böler.

Örnek:

@Bean
public IntegrationFlow splitterFlow() {
    return IntegrationFlows.from("inputChannel")
            .split(String.class, payload -> payload.split(","))
            .channel("outputChannel")
            .get();
}

8. Spring Integration'da Filter nasıl uygulanır?

Mesajları belirli kriterlere göre filtreler.

Örnek:

@Bean
public IntegrationFlow filterFlow() {
    return IntegrationFlows.from("inputChannel")
            .filter((String p) -> p.contains("OK"))
            .channel("outputChannel")
            .get();
}

9. Spring Integration'da Service Activator nedir?

Mesajı alıp bir service methodunu çağırır.

10. Spring Integration'da WireTap nedir?

Mesajları izlemek için kullanılır, mesajın kopyasını farklı bir kanala gönderir.

Örnek:

@Bean
public IntegrationFlow wiretapFlow() {
    return IntegrationFlows.from("inputChannel")
            .wireTap("auditChannel")
            .channel("outputChannel")
            .get();
}

11. Spring Integration'da Bridge nedir?

İki farklı channel arasında köprü kurar.

12. Spring Integration'da Message Endpoints nelerdir?

  • Transformer
  • Filter
  • Router
  • Splitter
  • Aggregator
  • Service Activator
  • Channel Adapter

13. Spring Integration'da Channel Adapter nedir?

External sistemlerle (dosya, veritabanı, JMS vb.) iletişim kurmak için kullanılır.

14. Spring Integration'da Message nasıl oluşturulur?

MessageBuilder ile mesaj oluşturulur.

Örnek:

Message<String> message = MessageBuilder.withPayload("Hello")
    .setHeader("header1", "value1")
    .build();

15. Spring Integration'da Polling Consumer nasıl çalışır?

Belirli aralıklarla kaynakları kontrol eder.

16. Spring Integration'da Transactional Messaging nasıl yapılır?

Mesajlar transaction kapsamında gönderilir veya rollback edilir.

17. Spring Integration'da Error Handling nasıl yapılır?

Hata durumunda mesajları özel bir kanala yönlendirmek için error channel kullanılır.

18. Spring Integration'da Claim Check pattern nasıl uygulanır?

Büyük veriler geçici olarak depolanır, sadece referansı mesaj olarak gönderilir.

19. Spring Integration'da Content Enricher nedir?

Mesaja ek bilgiler eklemek için kullanılır.

20. Spring Integration'da Scatter-Gather pattern nasıl uygulanır?

Mesaj birden fazla recipient'e gönderilir ve yanıtlar toplanır.

21. Spring Integration'da Messaging Gateway nasıl kullanılır?

Java interface üzerinden messaging sistemine erişim sağlar.

Örnek:

@MessagingGateway
public interface OrderGateway {
    void processOrder(Order order);
}

22. Spring Integration'da Message Store nedir?

Mesajları kalıcı olarak saklamak için kullanılır.

23. Spring Integration'da Control Bus nedir?

Runtime'da sistem bileşenlerini yönetmek için kullanılır.

24. Spring Integration'da Message History nasıl tutulur?

Mesajın geçtiği kanalların kaydını tutar.

25. Spring Integration best practices nelerdir?

  • DSL kullanarak akışları daha okunabilir hale getirmek
  • Error handling mekanizmaları kurmak
  • Transaction yönetimi yapmak
  • Message'ları immutable tutmak
  • Test edilebilir akışlar tasarlamak

Spring DevOps

Senior seviye Spring DevOps mülakat soruları ve cevapları.

1. Spring Boot uygulamasında Actuator nedir?

Health check, metrics, env bilgisi gibi production izleme endpoint'lerini sağlar.

Örnek:

curl http://localhost:8080/actuator/health

2. Spring Boot uygulamasında Prometheus & Grafana entegrasyonu nasıl yapılır?

Actuator metrics Prometheus formatında expose edilir.

application.yml:

management:
  endpoints:
    web:
      exposure:
        include: prometheus

3. Kubernetes ortamında Spring Boot config nasıl yönetilir?

ConfigMap ve Secret kullanılır.

Örnek:

env:
  - name: SPRING_DATASOURCE_URL
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: db-url

4. Spring Boot uygulamasında Blue-Green Deployment nasıl yapılır?

Yeni versiyon (green) yanına deploy edilir. Trafik yönlendirilince eski versiyon (blue) silinir.

5. Production ortamında Spring Boot için en önemli best practices nelerdir?

  • Externalized config (Config Server/K8s Secret)
  • Health checks & readiness probes
  • Centralized logging (ELK, Loki)
  • Distributed tracing (Zipkin, Jaeger)
  • CI/CD pipeline (Jenkins, GitHub Actions)

6. Spring Boot uygulamasında Docker Healthcheck nedir ve nasıl uygulanır?

Container'ın sağlık durumunu kontrol eder.

Örnek:

HEALTHCHECK --interval=30s --timeout=5s   CMD curl -f http://localhost:8080/actuator/health || exit 1

7. Kubernetes ConfigMap ve Secret farkı nedir?

  • ConfigMap: Konfigürasyon verileri.
  • Secret: Şifreli/veri tabanı şifreleri gibi hassas veriler.

8. Kubernetes Rolling Update nasıl yapılır?

Uygulama sıfır downtime ile güncellenir.

Komut:

kubectl set image deployment/my-app my-app=image:v2
kubectl rollout status deployment/my-app

9. Log aggregation için ELK stack nasıl çalışır?

  • Elasticsearch: Logları depolar.
  • Logstash: Veri toplar.
  • Kibana: Görselleştirir.

10. Spring Boot uygulamasında Custom Endpoint nasıl oluşturulur?

Özel endpoint'ler oluşturulabilir.

Örnek:

@Component
@Endpoint(id="custom")
public class CustomEndpoint {
    @ReadOperation
    public String custom() { return "custom endpoint"; }
}

11. Spring Boot uygulamasında Health Indicator nasıl eklenir?

Özel health indicator'lar oluşturulabilir.

Örnek:

@Component
public class DatabaseHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        return Health.up().withDetail("db", "up").build();
    }
}

12. Spring Boot uygulamasında Profil bazlı config nasıl yapılır?

Farklı ortamlar için farklı konfigürasyon dosyaları kullanılır.

Örnek:

spring:
  profiles: dev
  datasource:
    url: jdbc:h2:mem:testdb

13. Spring Boot uygulamasında CI/CD pipeline nasıl oluşturulur?

Jenkins, GitHub Actions, GitLab CI gibi araçlarla otomatik build, test ve deploy süreçleri oluşturulur.

14. Spring Boot uygulamasında Distributed Tracing nasıl yapılır?

Sleuth ve Zipkin kullanılarak request'lerin takibi yapılır.

15. Spring Boot uygulamasında Circuit Breaker nasıl izlenir?

Hystrix Dashboard veya Resilience4j metrics ile circuit breaker durumu izlenir.

16. Spring Boot uygulamasında Memory Leak nasıl tespit edilir?

VisualVM, JProfiler gibi araçlarla veya heap dump analiz edilerek tespit edilir.

17. Spring Boot uygulamasında JVM tuning nasıl yapılır?

JVM parametreleri ile heap boyutu, garbage collector ayarları yapılır.

Örnek:

java -Xms512m -Xmx1024m -XX:+UseG1GC -jar app.jar

18. Spring Boot uygulamasında Thread Dump nasıl alınır?

jstack, VisualVM veya Actuator endpoint'i ile thread dump alınabilir.

Actuator ile:

curl http://localhost:8080/actuator/threaddump

19. Spring Boot uygulamasında Heap Dump nasıl alınır?

jmap, VisualVM veya Actuator endpoint'i ile heap dump alınabilir.

Actuator ile:

curl http://localhost:8080/actuator/heapdump

20. Spring Boot uygulamasında Liveness ve Readiness Probe nasıl yapılandırılır?

Kubernetes'te uygulamanın durumunu kontrol etmek için kullanılır.

Örnek:

livenessProbe:
  httpGet:
    path: /actuator/health/liveness
    port: 8080
readinessProbe:
  httpGet:
    path: /actuator/health/readiness
    port: 8080

21. Spring Boot uygulamasında Graceful Shutdown nasıl yapılır?

Uygulama kapatılırken mevcut request'lerin tamamlanması sağlanır.

Örnek:

server:
  shutdown: graceful

22. Spring Boot uygulamasında Externalized Configuration nasıl yapılır?

Config Server, environment variables, Kubernetes ConfigMap/Secret gibi yöntemlerle konfigürasyon dışarıdan sağlanır.

23. Spring Boot uygulamasında Logback yapılandırması nasıl yapılır?

logback-spring.xml dosyası ile loglama yapılandırılır.

24. Spring Boot uygulamasında Micrometer nasıl kullanılır?

Özel metrikler oluşturmak için kullanılır.

Örnek:

@Autowired
private MeterRegistry meterRegistry;

public void handleRequest() {
    Timer.Sample sample = Timer.start(meterRegistry);
    try {
        // İşlem
    } finally {
        sample.stop(meterRegistry.timer("request.timer"));
    }
}

25. Spring Boot DevOps best practices nelerdir?

  • Infrastructure as Code (IaC) kullanmak
  • Containerization (Docker) yapmak
  • CI/CD pipeline kurmak
  • Monitoring ve alerting mekanizmaları kurmak
  • Security scanning yapmak
  • Backup ve disaster recovery planları oluşturmak