application.properties Deep Dive
application.properties (src/main/resources mein) Spring Boot ki PRIMARY configuration file hai — KEY=VALUE format mein, poori application ka BEHAVIOR CONTROL kiya jaata hai — server port, database credentials, logging levels, aur CUSTOM application-specific properties.
Ye properties Spring Boot ke AUTO-CONFIGURATION se DIRECTLY JUDI hoti hain — jaise spring.datasource.url set karна, DataSource bean ki configuration BADAL deta hai, bina EK LINE Java code likhe. @Value annotation ya @ConfigurationProperties se, YE values Java code mein bhi READ ki ja sakti hain.
# Server config:
server.port=8081
server.servlet.context-path=/api
# Database:
spring.datasource.url=jdbc:postgresql://localhost:5432/bookstore
spring.datasource.username=admin
spring.datasource.password=secret
# Logging:
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
# Custom application properties:
app.jwt.expiration=86400000
app.upload.max-size=10MB- KEY=VALUE format — HAR property, HAR aspect ka behavior control karti hai
- spring.* prefixed properties = Spring Boot ke internal auto-configuration
- Custom properties (app.*) = tumhare khud ke application-specific settings
Spring Boot MULTIPLE SOURCES se properties LOAD kar sakta hai — command-line arguments, environment variables, application-{profile}.properties, application.properties — HAR EK ki EK SPECIFIC PRIORITY hai. Command-line arguments SABSE HIGH priority rakhte hain (OVERRIDE kar dete hain baaki SAB ko).
- 1. Command-line arguments (HIGHEST priority)
- 2. Environment variables
- 3. application-{profile}.properties
- 4. application.properties (LOWEST, default fallback)
@Value("${property.name}") annotation se, EK SPECIFIC property DIRECTLY ek field mein INJECT ki ja sakti hai. Default value bhi diya ja sakta hai colon (:) syntax se — agar property NOT SET hai, default value use hoti hai.
@Component
public class AppConfig {
@Value("${app.jwt.expiration:3600000}") // default: 1 hour agar property missing ho
private long jwtExpiration;
}