簡體   English   中英

使用命令行參數覆蓋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沒有配置名稱,第二個命令將運行良好,第一個命令也無法正常工作。

這已經有幾個月了,但是我要回答它,因為我剛遇到這個問題並通過谷歌和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(...)時是否傳遞命令行參數?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM