Return to site

SPRING VS QUARKUS: CONFIG INJECTION KNOCKOUT ⚔️

· quarkus,springboot,java
Section image

TLDR 🚀

@ConfigProperty (Quarkus/MicroProfile) ≈ Spring @Value for simple values, but no SpEL in Quarkus. For grouped properties, use @ConfigMapping (Quarkus) vs @ConfigurationProperties (Spring). ✅

SAME IDEA (SIMPLE VALUES) 🔁

- Inject configuration values into code 🔌

- Built-in type conversion (int, boolean, duration, lists) 🔄

- Defaults supported 🟩

KEY DIFFERENCES 🧩

- SPEL: Spring @Value supports SpEL (#{...}); Quarkus @ConfigProperty does not ❌

- OPTIONALS: Quarkus easily injects Optional〈T〉; Spring commonly uses :default syntax 🧰

- STRUCTURED CONFIG: Prefer @ConfigMapping in Quarkus for cohesive groups (like Spring’s @ConfigurationProperties) 🗂️

CODE QUICK GLANCE 🛠️

1️⃣ Spring (simple + default):

@Value("${app.timeout:30}")

int timeout;

2️⃣ Quarkus (simple + default):

@Inject

@org.eclipse.microprofile.config.inject.ConfigProperty(name = "app.timeout", defaultValue = "30")

int timeout;

3️⃣ Quarkus (structured):

import io.smallrye.config.ConfigMapping;

import io.smallrye.config.WithDefault;

@ConfigMapping(prefix = "app")

interface AppConfig {

@WithDefault("30") int timeout();

String name();

}

WHEN TO USE WHAT 🎯

- Simple single values → @Value (Spring) or @ConfigProperty (Quarkus)

- Many related properties → @ConfigurationProperties (Spring) or @ConfigMapping (Quarkus)

MIGRATION TIP 🧭

Moving from Spring to Quarkus? Remove SpEL in config and migrate grouped properties to @ConfigMapping for a clean, type-safe setup. ✨

#Java #Spring #SpringBoot #Quarkus #MicroProfile #JakartaEE #Configuration #CloudNative #DeveloperTips #Migration #CleanCode