我有一个Maven / SpringBootApplication,它从Spring Config Server获取其属性。我需要使用命令行参数来覆盖这些属性的值。不幸的是,这些属性保留了配置服务器提供的值,并且不会被命令行参数覆盖。
我阅读了有关该主题的所有可能线索,但似乎都不适用于我的问题。
这是我的Spring启动应用程序(参数正在传递给SpringApplication)
@SpringBootApplication
@ComponentScan("com.mycompany")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
这里是组件和属性
@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;
}
正在传递的参数由应用程序接收(从调试器中提取):
0:"--debug=true"
1:"--logging.level.org.springframework.web=TRACE"
2:"--mycompany.converter.converter-uri.office=foo"
hash:0
value:char[44]@25
我希望属性converterUriOffice的值为foo 相反,它从配置服务器(http://localhost:3000/convert/office)中获取其值
答案 0 :(得分:1)
Devilluminati的链接完成了这项工作。非常感谢!为了使内容尽可能清晰,这是我必须要做的。
1-我的应用程序有一个名为application.yml的配置服务器提供的匹配的YML文件
2-在application.yml中,我有两个配置文件,我只希望能够在使用本地配置文件时覆盖参数。 这就是我必须添加到application.yml中的内容:
print(final_res)
ma freq1 phd freq2
0 a 1 a 8
1 b 2 b 9
一旦这样做(并重新启动配置服务器以确保它拉最新的YML),我就可以通过将以下内容传递给命令行来覆盖上面的值:
spring:
profiles: local
cloud:
config:
override-system-properties: false
答案 1 :(得分:0)
覆盖远程属性的值 通常由引导上下文添加到您的应用程序 “远程”(例如从Config Server),默认情况下它们不能是 在本地覆盖,命令行除外。如果你想允许 您的应用程序使用其自己的属性覆盖远程属性 系统属性或配置文件,远程属性源必须 通过设置spring.cloud.config.allowOverride = true授予权限 (在本地设置此功能无效)。设置该标志后, 一些更细粒度的设置来控制遥控器的位置 与系统属性和应用程序的属性相关的属性 本地配置:spring.cloud.config.overrideNone = true覆盖 任何当地财产来源,以及 如果仅系统,spring.cloud.config.overrideSystemProperties = false 属性和环境变量应覆盖远程设置,但不能 本地配置文件。
这里与解决方案https://github.com/spring-cloud/spring-cloud-config/issues/907
相同文档不是很清楚,因为它说命令行 参数始终优先于远程配置。
由应用程序添加到您的应用程序的属性源 引导程序上下文通常是“远程”的(例如,来自Config Server),并且 默认情况下,除非在命令上,否则无法在本地覆盖它们 线。
要实现此目的,您必须激活
spring.cloud.config.override-system-properties=false
配置 (文档仅讨论系统属性,但似乎 也适用于命令行参数。