Spring boot Spring boot@Value属性未被命令行参数覆盖
我有一个Maven/springboot应用程序,它从Spring配置服务器获取属性。我需要使用命令行参数覆盖这些属性的值。不幸的是,这些属性保留了配置服务器提供的值,并且没有被命令行参数覆盖Spring boot Spring boot@Value属性未被命令行参数覆盖,spring-boot,properties,arguments,command,line,Spring Boot,Properties,Arguments,Command,Line,我有一个Maven/springboot应用程序,它从Spring配置服务器获取属性。我需要使用命令行参数覆盖这些属性的值。不幸的是,这些属性保留了配置服务器提供的值,并且没有被命令行参数覆盖 我已经确认参数已正确地传递到应用程序,正如我看到的那样,参数已传递到SpringApplication.run 我可以在Spring框架的函数ConfigurableApplicationContext中看到环境中包含environment.propertysources.propertySourceL
- 我已经确认参数已正确地传递到应用程序,正如我看到的那样,参数已传递到SpringApplication.run李>
- 我可以在Spring框架的函数ConfigurableApplicationContext中看到环境中包含environment.propertysources.propertySourceList.SimpleCommand LinePropertySource.source.optionArgs中的参数
- 如果我尝试设置一个Spring定义的值(例如--logging.level.org.springframework.web=TRACE),它会工作,这意味着Spring会记录跟踪
@Component
public class TaskProcessor implements com.mycompnay.fwk.task.engine.TaskProcessor {
private RestTemplate restTemplate = new RestTemplate();
@Value("${mycompany.converter.converter-uri.office}")
private String converterUriOffice;
}
正在传递的参数由应用程序接收(从调试器中提取):
我希望属性转换器rioffice的值为foo
相反,它从配置服务器()获取其值。可在以下文档中找到 重写远程属性的值,该属性源 通过引导上下文添加到应用程序中的 “远程”(例如,从配置服务器),默认情况下,它们不能 本地重写,命令行上除外。如果你想允许 您的应用程序将使用自己的属性覆盖远程属性 系统属性或配置文件,远程属性源必须 通过设置spring.cloud.config.allowOverride=true来授予它权限 (在本地设置此选项不起作用)。一旦设置了该标志,就有 一些更细粒度的设置来控制远程服务器的位置 与系统属性和应用程序的 本地配置:spring.cloud.config.overrideOne=true以覆盖 任何本地财产来源,以及 spring.cloud.config.overrideSystemProperties=false,如果只有系统 属性和环境变量应覆盖远程设置,但不能覆盖 本地配置文件 解决方案也有同样的问题 文档不是很清楚,因为它说命令行 参数始终优先于远程配置 由应用程序添加到您的属性源 引导上下文通常是“远程的”(例如,从配置服务器),并且 默认情况下,它们不能在本地重写,除非在命令上 线路 要实现这一点,您必须激活
spring.cloud.config.override系统属性=false
configuration
(文档仅讨论系统属性,但似乎
也适用于命令行参数)
来自Devilluminati的链接完成了这项工作。谢谢!为了尽可能清楚地说明这一点,以下是我必须做的 1-我的应用程序有一个匹配的YML文件,由名为application.YML的配置服务器提供服务 2-在application.yml中,我有两个配置文件,我只希望在使用本地配置文件时能够覆盖参数。 下面是我必须添加到application.yml的内容:
spring:
profiles: local
cloud:
config:
override-system-properties: false
一旦我这样做了(并重新启动配置服务器以确保它获取最新的YML),我就可以通过将以下内容传递到命令行来覆盖上面的值:
--mycompany.converter.converter-uri.office=foo
如果您使用命令行运行,您的脚本将看起来像
java-jar--mycompany.converter.converter uri.office=value
Thank you DeviceLuminati。它成功了。下面是yml配置文件的一个摘录,供下一批可能与之斗争的人参考。注意,我使用了一个本地概要文件:spring:profiles:localcloud:config:override-system-properties:false
spring:
profiles: local
cloud:
config:
override-system-properties: false
--mycompany.converter.converter-uri.office=foo