简体   繁体   中英

Setting “spring.config.name” property programmatically does not work

According to this blog post from December 2017, it is possible to change the name used to search for Spring Boot configuration files programmatically like this:

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);
    }
}

I have tried this using Spring Boot version 1.5.9-RELEASE , but this does not work. Setting spring.config.name as an argument does work:

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

However, I do not have control over the arguments passed to my Spring Boot application when it is started so this is not an option.

Is it no longer possible to set spring.config.name programmatically, am I missing something, or is this a bug?

Doesn't directly answer the question, but I eventually discovered a workaround. Setting the spring.config.name by adding it to the arguments does work:

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()]));
    }
}

Your example works for me (Spring Boot 2.4.3) so it could be bug at that time.

A similar SO answer also uses SpringApplicationBuilder.properties(String... defaultProperties) to define configuration name.

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

I checked both spring.config.name=conf and spring.config.name:conf and they work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM