设置" spring.config.name"属性以编程方式不起作用

时间:2018-01-19 18:12:44

标签: java spring-boot

根据2017年12月的this blog post,可以像以下那样以编程方式更改用于搜索Spring Boot配置文件的名称:

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class)
            .properties("spring.config.name:conf")
            .build()
            .run(args);
    }
}

我已尝试使用Spring Boot版本 1.5.9-RELEASE ,但这不起作用。将spring.config.name设置为参数确实有效:

mvn spring-boot:run -Dspring.config.name=conf

但是,我无法控制在启动时传递给我的Spring Boot应用程序的参数,因此这不是一个选项。

是不可能以编程方式设置spring.config.name,我错过了什么,还是这个错误?

2 个答案:

答案 0 :(得分:1)

没有直接回答这个问题,但我最终发现了一种解决方法。通过将spring.config.name添加到参数中来设置package com.ups.cep; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { List<String> arguments = new ArrayList<>(Arrays.asList(args)); arguments.add("-Dspring.config.name=conf"); SpringApplication.run(Application.class, arguments.toArray(new String[arguments.size()])); } } 确实有效:

EXEC tSQLt.RunAll;

答案 1 :(得分:0)

您的示例适用于我(Spring Boot 2.4.3),因此当时可能是错误。

类似的 SO answer 也使用 SpringApplicationBuilder.properties(String... defaultProperties) 来定义配置名称。

new SpringApplicationBuilder(Application.class)
        .properties("spring.config.name:conf")
        .build()
        .run(args);

我检查了 spring.config.name=confspring.config.name:conf,它们都可以工作。