Spring Boot @ConditionalOnProperty

สำหรับวันนี้เรียกว่าไปแงะจากที่เรียน Course manning live project อันเก่าที่ดองไว้ แล้วพยายามหาความสัมพันธ์ เพราะ ผมสาย dotnet มันเลยไม่มีแบบนี้ เลยเขียน Blog ไว้ดีกว่าครับ

@ConditionalOnProperty คือ อะไร

เจ้า @ConditionalOnProperty เป็นส่วนนึงของ Spring Boot auto-configuration module (org.springframework.boot.autoconfigure.*) แล้วที่นี่มันทำให้ Config แล้วยิงพวก feature flag ได้ จากตัวอย่าง ผมสงสัยตัว

ที่นี้มาลองชำแหละกัน DomainConfig

public class DomainConfig {
    @Bean(name = "auditingDateTimeProvider")
    public DateTimeProvider dateTimeProvider() {
        return () -> Optional.of(OffsetDateTime.now());
    }

    @Bean
    @DependsOn("liquibase")
    @ConditionalOnProperty(prefix = "dataloader", name = "loadsample", havingValue = "true")
    public SampleDataLoader sampleDataLoader(){
        return new SampleDataLoader();
    }
}

ตรงบรรทัดที่ 9 การกำหนด config ถ้าใน application.properties หรือ yaml ส่วนของ SampleDataLoader ทำงานจะเป็นตามนี้ครับ

dataloader.loadsample=true

เงื่อนไขทำงานของ sampleDataLoader ถ้ามี dataloader + loadsample และต้องมีค่า true (จากในส่วน havingValue)

แล้วที่นี้ในส่วน ENV จะถ้าสังเกตุใน Docker Compose จะกำหนดตามนี้

DATALOADER_LOADSAMPLE=true

นอกจากนี้ยังมี matchIfMissing ใช้สำหรับกำหนดค่า default กรณีที่ไม่ได้กำหนด properties ไว้ใน application.properties หรือ yaml หรือ ENV มันจะใช้ค่า default แทน

อ๋อ และลองกลับไปหาใน dotnet มีทำ lib คล้ายๆกันไว้ https://github.com/yuzd/Autofac.Annotation ถ้าเป็นปกติแล้ว เหมือนจะเขียน if ดักเอาเองใน DI


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.