从命令行参数

时间:2018-10-23 18:20:45

标签: spring-boot

我们知道我们可以通过@Value注释将配置外部化,例如在Spring启动项目中。

@Value("${max.routes}")
private int maxRoutes;

在这种情况下,我们通过以下方式在注释参数本身中提供默认值,

@Value("${max.routes:10}")
private int maxRoutes;

在启动此应用时,我们可以通过传递VM参数来覆盖值吗?

例如,-Dmax.routes=20。 它会覆盖该值吗?

2 个答案:

答案 0 :(得分:0)

是的,系统属性和命令行参数将覆盖这些属性值。

如果您这样运行应用程序...

public static void main(String[] args) {
  SpringApplication.run(MyApplication.class, args);
}

...您无法使用-Dmax.routes=20甚至使用应用程序参数--max.routes=20覆盖属性。应用程序参数将具有最高优先级。

答案 1 :(得分:0)

看看Spring boot文档的Externalized Configuration部分:

  

Spring Boot使您可以外部化配置,以便可以在不同环境中使用相同的应用程序代码。

对于配置源的优先级有非常严格的规则:

PERL_IMPLICIT_CONTEXT

例如OS.env变量将覆盖application.propertis中定义的属性,Java系统属性将覆盖它们,基本上,当您不运行测试时,命令行参数将覆盖所有内容。