使用命令行参数覆盖 spring-boot 中的 yml 配置不起作用
Override yml configuration in spring-boot with command line arguments not work
我有一个 spring-boot 应用程序。我想在执行 jar 时覆盖 application.yml 中配置的一些属性。
我的代码是这样的:
@Service
public class CommandService {
@Value("${name:defaultName}")
private String name;
public void print() {
System.out.println(name);
}
}
而 Application.java 是
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private CommandService commandService;
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
@Override
public void run(String... args) throws Exception {
commandService.print();
}
}
application.yml
name: nameInApplication
当我这样执行命令时:
java -jar app.jar --name=nameInCommand
没用
第二个命令也不起作用:
java -Dname=nameInCommand2 -jar app.jar
但是如果 application.yml 没有配置名称,则第二个命令可以正常工作,而第一个命令也无法正常工作。
这是几个月前的事了,但我要回答它,因为我刚刚 运行 进入这个问题并通过 google 找到了你的问题,Ivan 的评论勾起了我的记忆。由于他没有详细说明,我不确定你是否解决了你的问题(你现在可能已经解决了),你将要改变:
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
到
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
就这么简单。之前的论点在传递时永远不会消失,因此不会覆盖您的 application.yml 属性。因此,以防万一您还没有弄清楚,或者有人像我一样偶然发现了这个问题,这就是 Ivan
的意思
do you pass command line arguments when starting
SpringApplication.run(...)
?
我有一个 spring-boot 应用程序。我想在执行 jar 时覆盖 application.yml 中配置的一些属性。
我的代码是这样的:
@Service
public class CommandService {
@Value("${name:defaultName}")
private String name;
public void print() {
System.out.println(name);
}
}
而 Application.java 是
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private CommandService commandService;
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
@Override
public void run(String... args) throws Exception {
commandService.print();
}
}
application.yml
name: nameInApplication
当我这样执行命令时:
java -jar app.jar --name=nameInCommand
没用
第二个命令也不起作用:
java -Dname=nameInCommand2 -jar app.jar
但是如果 application.yml 没有配置名称,则第二个命令可以正常工作,而第一个命令也无法正常工作。
这是几个月前的事了,但我要回答它,因为我刚刚 运行 进入这个问题并通过 google 找到了你的问题,Ivan 的评论勾起了我的记忆。由于他没有详细说明,我不确定你是否解决了你的问题(你现在可能已经解决了),你将要改变:
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
到
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
就这么简单。之前的论点在传递时永远不会消失,因此不会覆盖您的 application.yml 属性。因此,以防万一您还没有弄清楚,或者有人像我一样偶然发现了这个问题,这就是 Ivan
的意思do you pass command line arguments when starting
SpringApplication.run(...)
?