Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Spring Boot

Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Paylaş

Spring Boot Dersleri‘ne devam ediyorum.

İçindekiler

  • ConditionalOnExpression Nedir?
  • ConditionalOnExpression Uygulama Örneği
    • ConditionalOnExpression Konfigurasyonu
  • Uygulama Örneğini İndir

Bu yazıda @ConditionalOnExpression anotasyonunun ne olduğundan, hangi amaçla ve ne zaman kullanmamız gerektiğinden bahsedeceğim. Proje örneğini yazının sonundaki linkten erişebilirsiniz.

ConditionalOnExpression Nedir?

Uygulamalarımızı dinamik olarak kontrol ederek farklı davranmasını sağlayabiliriz. Bu farklı davranışlar sayesinde uygulamamızı, @ConditionalOnExpression anotasyonu kullanarak SpEL ifadesinin true olduğunda ilgili kod bloğunun ya da sınıfın çalışmasını sağlamaktadır.

ConditionalOnExpression Uygulama Örneği

Yapacağımız uygulama şu şekilde çalışacak:

Spring Boot ConditionalOnExpression
Spring Boot ConditionalOnExpression Uygulama Ornegi

İstemciden bir istek gelecek ve bu istek yapıldıktan sonra application.yaml dosyasına vereceğimiz bir tanımlama ile InMemoryService kullanarak mı yoksa DatabaseService kullanarak çalışacağına karar verecektir.

Bir DataLayerService arayüzü tanımlayalım ve burada kayıt işlemi olsun.

public interface DataLayerService {
    String save(Student student);
}Code language: Java (java)

Bu arayüzü implement eden iki adet servis tanımlayacağız. Bu servislerin ismi DatabaseServiceImpl ve InMemoryServiceImpl olacak.

public class DatabaseServiceImpl implements DataLayerService {
    @Override
    public String save(Student student) {
        return "Saved Student to Database " + student.id();
    }
}Code language: Java (java)
public class InMemoryServiceImpl implements DataLayerService {
    @Override
    public String save(Student student) {
        return "Saved Student to Inmemory " + student.id();
    }
}Code language: Java (java)

ConditionalOnExpression Konfigurasyonu

Şimdi ise ConditionalOnExpression kullanarak hangi servisimizin çalışması gerekeceğine karar verecek bir config sınıfı oluşturalım.

@Configuration
public class StudentServiceConfiguration {

    @Bean
    @ConditionalOnProperty(prefix = "data.layer", name = "type", havingValue = "inmemory")
    public DataLayerService inMemoryService(){
        return new InMemoryServiceImpl();
    }

    @Bean
    @ConditionalOnProperty(prefix = "data.layer", name = "type", havingValue = "database")
    public DataLayerService databaseService(){
        return new DatabaseServiceImpl();
    }
}
Code language: Java (java)

Burada kullandığımız anotasyon sayesinde dinamik bir karar vererek hangi sınıfın çalışması gerektiğine karar vermiş oluyoruz. prefix ve name alanları, properties dosyamızın içerisinde yazan bilgilere karşılık gelen değerleri temsil etmektedir. havingValue değeri ise karşılık gelen değerin true ya da false olmasına göre koşulu sağlayan bir attribute’dir.

Şimdi ise controller’ımızı oluşturalım.

@RestController("/")
public class StudentController {
    private final StudentService studentService;

    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }
    @GetMapping
    public String saveStudent(@RequestBody Student student){
        return studentService.saveStudent(student);
    }
}Code language: PHP (php)

application.properties dosyasına tanımlamamızı yapalım ve hangi servisten çalışacağına karar verelim.

data.layer.type=inmemory

Şimdi Postman’den bir istek atalım.

Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Şimdi database olarak değiştirip istek atalım.

data.layer.type=database
Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Uygulama Örneğini İndir

Projenin Kaynak Kodlarına Ulaş

Cevap olarak ise Burak çıktısını verecektir. Eğer bir mediaType belirtmezsek json olarak göndermemiz gerekmektedir. mediaType tanımı json olursa da yine json formatı kabul etmemiz gerekmektedir.


Önceki Ders: Spring Boot Content Negotiation XML – JSON Uygulama Örneği
Spring Boot Dersleri
Sonraki Ders:

Tags:

ConditionalOnExpression nedırspring boot dersleri

Paylaş

Diğer Yazılar

Burak KUTBAY
Previous

MacOS Control+Space Çalışmama Sorunu (Intellij IDEA, VsCode..)

Java 21 – Record Patterns Yeni Gelen Özellikler
Next

Java 21 – Record Patterns Nedir? (JEP 440)

Next
Java 21 – Record Patterns Yeni Gelen Özellikler
25 Eylül 2023

Java 21 – Record Patterns Nedir? (JEP 440)

Previews
29 Temmuz 2023

MacOS Control+Space Çalışmama Sorunu (Intellij IDEA, VsCode..)

Burak KUTBAY

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Content Negotiation XML – JSON Uygulama Örneği

Spring Boot Interceptor Nedir Kullanım Uygulama Örneği

Spring Boot Interceptor Nedir? Uygulama Örneği

Spring Data Redis Cache Kullanım Örneği

Spring Boot Data Redis Nedir? Distributed Cache Kullanımı

Spring Boot Dersleri

Spring Boot Projelerinde Tomcat Yerine Jetty Kullanmak

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Android
Struts
Node.js
Spring Boot 3.0
Röportaj
Amazon Web Services
Vue.js
Gradle
Spring Native
Mikroservis Mimarisi
Redis
XCode
Debezium
Video
Java 21
Spring Cloud Stream
JPA
PostgreSQL
MongoDB
Spring Security
iPhone Uygulama Geliştirme
Objective C
Git
Apache Kafka
Spring Data
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
Spring Jdbc Template
RabbitMQ
PrimeFaces
JDBC
Manset
Google
Spring
Spring MVC
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
Microsoft
Veritabanı
Java SE
Tanıyalım
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale