spring-018: are-command-line-arguments-common?

Short Answer: It depends on the use case.

Command-line arguments in Spring Boot are not commonly used in everyday production deployments, but they are extremely useful in specific scenarios. Here’s a practical breakdown of when and why they matter:


When Command-Line Arguments Are Useful

1. Quick Configuration Overrides (Without Changing Code)

Overrides application.properties or application.yml dynamically.

  • Use case: Adjusting configuration without modifying files (useful in CI/CD pipelines).
  • Example: Change the port on startup:
java <span>-jar</span> app.jar <span>--server</span>.port<span>=</span>9090
  java <span>-jar</span> app.jar <span>--server</span>.port<span>=</span>9090
java -jar app.jar --server.port=9090

Enter fullscreen mode Exit fullscreen mode

  • Why?
    • Handy for testing different settings quickly.
    • Allows configurable deployments without modifying environment variables.

2. CI/CD & Dockerized Deployments

Pass runtime parameters in Kubernetes, Docker, or cloud deployments.

  • Use case: Injecting environment-specific configurations.
  • Example (Docker Compose):
<span>services</span><span>:</span>
<span>app</span><span>:</span>
<span>image</span><span>:</span> <span>my-spring-app</span>
<span>command</span><span>:</span> <span>[</span><span>"</span><span>java"</span><span>,</span> <span>"</span><span>-jar"</span><span>,</span> <span>"</span><span>app.jar"</span><span>,</span> <span>"</span><span>--spring.profiles.active=prod"</span><span>]</span>
  <span>services</span><span>:</span>
    <span>app</span><span>:</span>
      <span>image</span><span>:</span> <span>my-spring-app</span>
      <span>command</span><span>:</span> <span>[</span><span>"</span><span>java"</span><span>,</span> <span>"</span><span>-jar"</span><span>,</span> <span>"</span><span>app.jar"</span><span>,</span> <span>"</span><span>--spring.profiles.active=prod"</span><span>]</span>
services: app: image: my-spring-app command: ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

Enter fullscreen mode Exit fullscreen mode

  • Why?
    • Reduces reliance on config files in containerized environments.
    • Simplifies deployment workflows.

3. Feature Flags & A/B Testing

Enable/disable features dynamically.

  • Use case: Toggle features without restarting the app or redeploying.
  • Example:
java <span>-jar</span> app.jar <span>--feature</span>.toggle.newUI<span>=</span><span>true</span>
  java <span>-jar</span> app.jar <span>--feature</span>.toggle.newUI<span>=</span><span>true</span>
java -jar app.jar --feature.toggle.newUI=true

Enter fullscreen mode Exit fullscreen mode

  • Why?
    • Enables A/B testing or gradual feature rollouts.
    • Useful in staging environments where different versions of a feature need to be tested.

4. Scripted Automation & Local Development

Automate startup configurations for different environments.

  • Use case: Running local environments with different configs.
  • Example:
mvn spring-boot:run <span>-Dspring-boot</span>.run.arguments<span>=</span><span>"--debug=true"</span>
  mvn spring-boot:run <span>-Dspring-boot</span>.run.arguments<span>=</span><span>"--debug=true"</span>
mvn spring-boot:run -Dspring-boot.run.arguments="--debug=true"

Enter fullscreen mode Exit fullscreen mode

  • Why?
    • No need to edit application.properties every time you change an environment.
    • Simplifies local debugging and testing.

When Command-Line Arguments Are NOT Ideal

1. Large-Scale Production Configurations

Why? Configurations should be managed via environment variables or external config files, not passed manually in the command line.

2. Sensitive Data (Passwords, API Keys)

Why? Command-line arguments are visible in process lists (ps aux), making them insecure for secrets.

Use Environment Variables Instead:

<span>export </span><span>DB_PASSWORD</span><span>=</span><span>"mysecretpass"</span>
java <span>-jar</span> app.jar
  <span>export </span><span>DB_PASSWORD</span><span>=</span><span>"mysecretpass"</span>
  java <span>-jar</span> app.jar
export DB_PASSWORD="mysecretpass" java -jar app.jar

Enter fullscreen mode Exit fullscreen mode

3. Hard-to-Track Application Behavior

Why? If configurations change frequently via CLI arguments, debugging issues becomes harder.

Use Configuration Files Instead for better visibility.


Final Verdict: Useful, but Not Always Essential

Use Case Command-Line Arguments?
Quick testing & debugging Yes
CI/CD & cloud deployments Sometimes (useful in Docker, Kubernetes)
Feature toggles / A/B testing Yes
Sensitive credentials No (use environment variables instead)
Production environment configs No (use config files or config servers)

Takeaway

Command-line arguments are handy for quick overrides and automation.

They’re useful in local development and CI/CD, but not ideal for production configs.

For persistent settings, use application.properties or external configuration files instead.

原文链接:spring-018: are-command-line-arguments-common?

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
Live every day as the last day of life.
把活着的每一天看作生命的最后一天
评论 抢沙发

请登录后发表评论

    暂无评论内容