在Spring Boot应用程序中,命令行参数的优先级高于配置文件中的设置。当同一个属性在命令行参数和配置文件中都有定义时,命令行参数会覆盖配置文件中的值。
以下是Spring Boot中配置属性来源的优先级顺序,从最高到最低:
- 命令行参数(--server.port=8081)
- 系统环境变量
- JVM系统属性(通过-D参数设置)
- SPRING_APPLICATION_JSON属性(嵌入在环境变量或系统属性中的JSON)
- ServletConfig初始化参数
- ServletContext初始化参数
- JNDI属性(Java Naming and Directory Interface)
- Java系统属性(System.getProperties())
- random.*属性
- 应用程序配置文件(application.properties或application.yml)
- 在同一配置文件中,后面的属性会覆盖前面的属性。
- 默认属性(通过SpringApplication.setDefaultProperties设置)
因此,如果你在命令行上指定了一个属性,它将覆盖application.properties或application.yml文件中相应的属性值。这允许你在运行时轻松地覆盖配置文件中的设置,而不需要修改配置文件本身。