我们知道我们可以通过@Value注释将配置外部化,例如在Spring启动项目中。
@Value("${max.routes}")
private int maxRoutes;
在这种情况下,我们通过以下方式在注释参数本身中提供默认值,
@Value("${max.routes:10}")
private int maxRoutes;
在启动此应用时,我们可以通过传递VM参数来覆盖值吗?
例如,-Dmax.routes=20
。
它会覆盖该值吗?
答案 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系统属性将覆盖它们,基本上,当您不运行测试时,命令行参数将覆盖所有内容。