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