我有一个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没有配置名称,第二个命令将运行良好,第一个命令也无法正常工作。
答案 0 :(得分:5)
这已经有几个月了,但我会回答这个问题,因为我刚遇到这个问题并通过谷歌和Ivan的评论发现了你的问题。由于他没有详细说明,我不确定你是否解决了你的问题(你现在可能已经解决了),你将要改变:
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
到
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
那很简单。传递之前的参数永远不会去任何地方,因此不会覆盖你的application.yml属性。所以,万一你还没弄清楚,或者有人像我一样偶然发现了这个问题,那就是伊万的意思
启动时是否传递命令行参数?
SpringApplication.run(...)
?