
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