Bird
Raised Fist0
Spring Bootframework~10 mins

Environment variables in configuration in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Environment variables in configuration
Start Application
↓
Load application.properties
↓
Detect placeholders like ${ENV_VAR}
↓
Check OS Environment Variables
↓
Replace with value
↓
Inject values into Spring Beans
↓
Application runs with config values
Spring Boot reads configuration files, replaces placeholders with environment variable values, then injects them into the app.
Execution Sample
Spring Boot
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER:defaultUser}
spring.datasource.password=${DB_PASS}
This config uses environment variables DB_URL, DB_USER (with default), and DB_PASS for database connection.
Execution Table
StepConfig LinePlaceholderEnv Var Found?Value UsedAction
1spring.datasource.url=${DB_URL}${DB_URL}Yesjdbc:mysql://localhost:3306/mydbReplace placeholder with env var value
2spring.datasource.username=${DB_USER:defaultUser}${DB_USER}NodefaultUserUse default value as env var missing
3spring.datasource.password=${DB_PASS}${DB_PASS}YessecretPassReplace placeholder with env var value
4Inject values into beans---Spring injects resolved values into datasource bean
5Application starts---App runs with configured datasource
💡 All placeholders resolved; application configuration complete.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
DB_URLNot set in codejdbc:mysql://localhost:3306/mydbjdbc:mysql://localhost:3306/mydbjdbc:mysql://localhost:3306/mydbjdbc:mysql://localhost:3306/mydb
DB_USERNot set in codeNot founddefaultUserdefaultUserdefaultUser
DB_PASSNot set in codeNot foundNot foundsecretPasssecretPass
Key Moments - 3 Insights
What happens if an environment variable is missing but a default value is provided?
The default value is used instead of the missing environment variable, as shown in step 2 of the execution_table where DB_USER is missing but defaultUser is used.
What if an environment variable is missing and no default is given?
Spring Boot will fail to start or throw an error because it cannot resolve the placeholder, unlike DB_PASS which must be set or the app won't start.
How does Spring Boot inject these resolved values into the application?
After resolving placeholders, Spring injects the final values into beans like the datasource bean, as shown in step 4 of the execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what value is used for spring.datasource.username?
ADB_USER
Bnull
CdefaultUser
DsecretPass
💡 Hint
Check step 2 in the execution_table where DB_USER is not found and defaultUser is used.
At which step does Spring Boot inject the resolved environment variable values into the application beans?
AStep 1
BStep 4
CStep 3
DStep 5
💡 Hint
Refer to the 'Action' column in step 4 of the execution_table.
If DB_PASS environment variable was missing, what would happen according to the execution flow?
AApplication fails to start
BSpring uses a default password
CPlaceholder remains unresolved but app runs
DSpring ignores the password
💡 Hint
See key_moments about missing env vars without defaults and step 3 in execution_table.
Concept Snapshot
Spring Boot reads config files with placeholders like ${ENV_VAR}.
It replaces placeholders with environment variable values.
If missing, it uses defaults if provided, else errors.
Resolved values are injected into beans.
This allows flexible config without code changes.
Full Transcript
In Spring Boot, configuration files can include placeholders like ${DB_URL} that refer to environment variables. When the application starts, Spring Boot loads these files and looks for such placeholders. It then checks the operating system environment variables for matching names. If found, it replaces the placeholder with the environment variable's value. If not found but a default value is provided (like ${DB_USER:defaultUser}), it uses that default. If no default is given and the variable is missing, the application will fail to start. After resolving all placeholders, Spring Boot injects these values into the relevant beans, such as the datasource bean for database connections. This process allows the application to be configured flexibly across different environments without changing code.

Practice

(1/5)
1. What is the correct way to reference an environment variable named DB_HOST in a Spring Boot application.properties file?
easy
A. Use #DB_HOST# to reference the environment variable.
B. Use ${DB_HOST} to reference the environment variable.
C. Use env(DB_HOST) to reference the environment variable.
D. Use DB_HOST directly without any syntax.

Solution

  1. Step 1: Understand Spring Boot environment variable syntax

    Spring Boot uses ${VAR_NAME} syntax to inject environment variables into configuration files.
  2. Step 2: Match the syntax to the variable name

    For the variable DB_HOST, the correct syntax is ${DB_HOST}.
  3. Final Answer:

    Use ${DB_HOST} to reference the environment variable. -> Option B
  4. Quick Check:

    Environment variable syntax = ${VAR_NAME} [OK]
Hint: Remember: Spring Boot uses ${VAR_NAME} for env variables [OK]
Common Mistakes:
  • Using #VAR_NAME# instead of ${VAR_NAME}
  • Trying to call env(VAR_NAME) like a function
  • Using variable name without any syntax
2. Which of the following is the correct syntax to provide a default value for an environment variable PORT in application.properties?
easy
A. server.port=${PORT:8080}
B. server.port=${PORT:-8080}
C. server.port=${PORT=8080}
D. server.port=$PORT?8080

Solution

  1. Step 1: Recall default value syntax in Spring Boot

    Spring Boot uses ${VAR_NAME:defaultValue} to provide a default if the environment variable is missing.
  2. Step 2: Identify the correct syntax among options

    server.port=${PORT:8080} uses ${PORT:8080}, which is the correct way to set default port 8080.
  3. Final Answer:

    server.port=${PORT:8080} -> Option A
  4. Quick Check:

    Default value syntax = ${VAR_NAME:default} [OK]
Hint: Use colon : after variable name for default values [OK]
Common Mistakes:
  • Using = instead of : for default values
  • Using shell-style ${VAR:-default} which is invalid here
  • Using $VAR without braces or default
3. Given the following application.properties snippet:
app.name=${APP_NAME:MyApp}
app.port=${APP_PORT:9090}

If the environment variables APP_NAME is set to TestApp and APP_PORT is not set, what will be the values of app.name and app.port at runtime?
medium
A. app.name=TestApp and app.port=9090
B. app.name=MyApp and app.port=9090
C. app.name=TestApp and app.port=null
D. app.name=null and app.port=9090

Solution

  1. Step 1: Check environment variable APP_NAME

    APP_NAME is set to 'TestApp', so app.name uses this value, ignoring the default.
  2. Step 2: Check environment variable APP_PORT

    APP_PORT is not set, so app.port uses the default value 9090.
  3. Final Answer:

    app.name=TestApp and app.port=9090 -> Option A
  4. Quick Check:

    Set var overrides default; unset uses default [OK]
Hint: Set env var overrides default; unset uses default [OK]
Common Mistakes:
  • Assuming default is used even if env var is set
  • Assuming null if env var is missing without default
  • Confusing variable names or values
4. Consider this application.properties line:
database.url=jdbc:mysql://${DB_HOST}:${DB_PORT:3306}/mydb

When running the app, it throws an error because DB_HOST is not set. What is the best fix?
medium
A. Ignore the error; Spring Boot will use a fallback automatically.
B. Remove ${DB_HOST} and hardcode the host.
C. Set a default value for DB_HOST like ${DB_HOST:localhost}.
D. Change syntax to ${DB_HOST:-localhost} to fix it.

Solution

  1. Step 1: Identify cause of error

    DB_HOST is not set and no default is provided, causing Spring Boot to fail resolving the variable.
  2. Step 2: Provide a default value using correct syntax

    Use ${DB_HOST:localhost} to supply a default host if the environment variable is missing.
  3. Final Answer:

    Set a default value for DB_HOST like ${DB_HOST:localhost}. -> Option C
  4. Quick Check:

    Missing env var needs default to avoid errors [OK]
Hint: Always provide defaults for required env vars to avoid errors [OK]
Common Mistakes:
  • Using shell syntax ${VAR:-default} which Spring Boot does not support
  • Assuming Spring Boot auto-fills missing env vars
  • Hardcoding values reduces flexibility
5. You want to configure a Spring Boot app to read a nested environment variable for a Redis URL with fallback defaults. Which application.properties line correctly uses environment variables REDIS_HOST and REDIS_PORT with defaults localhost and 6379 respectively?
hard
A. redis.url=redis://$REDIS_HOST:$REDIS_PORT
B. redis.url=redis://${REDIS_HOST:-localhost}:${REDIS_PORT:-6379}
C. redis.url=redis://${REDIS_HOST}${REDIS_PORT}
D. redis.url=redis://${REDIS_HOST:localhost}:${REDIS_PORT:6379}

Solution

  1. Step 1: Recall Spring Boot default value syntax

    Spring Boot uses ${VAR_NAME:default} to provide defaults for environment variables.
  2. Step 2: Check each option for correct syntax and completeness

    redis.url=redis://${REDIS_HOST:localhost}:${REDIS_PORT:6379} correctly uses ${REDIS_HOST:localhost} and ${REDIS_PORT:6379} with colon syntax and includes the colon separator between host and port.
  3. Final Answer:

    redis.url=redis://${REDIS_HOST:localhost}:${REDIS_PORT:6379} -> Option D
  4. Quick Check:

    Use colon : for defaults; include separators explicitly [OK]
Hint: Use ${VAR:default} and include separators like : explicitly [OK]
Common Mistakes:
  • Using shell-style :- instead of : for defaults
  • Omitting colon between host and port
  • Using $VAR without braces or defaults
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard