application.yml

fruits:
  baseUrl: "http://localhost:8080"
  service:
    baseUrl: "http://localhost:8080"
  the-service:
    baseUrl: "http://localhost:8080" 
 ```

 System variables set (printenv | grep -i fruits):
 ```                            
FRUITS_BASEURL=overridden
FRUITS_SERVICE_BASEURL=overridden
FRUITS_THESERVICE_BASEURL=overridden

Application class:

@SpringBootApplication
@EnableScheduling
public class Application {

    @Value("${fruits.baseUrl}") String fruitsBaseUrl;
    @Value("${fruits.service.baseUrl}") String fruitsServiceBaseUrl;
    @Value("${fruits.the-service.baseUrl}") String fruitsTheServiceBaseUrl;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @EventListener
    public void onStartup(ApplicationReadyEvent event) {
        System.out.println(String.format("fruitsBaseUrl: %s", fruitsBaseUrl));
        System.out.println(String.format("fruitsServiceBaseUrl: %s", fruitsServiceBaseUrl));
        System.out.println(String.format("fruitsTheServiceBaseUrl: %s", fruitsTheServiceBaseUrl));
    }
}

Output:

fruitsBaseUrl: overridden
fruitsServiceBaseUrl: overridden
fruitsTheServiceBaseUrl: http://localhost:8080

While the binding from environment variables works for fruitsBaseUrl and fruitsServiceBaseUrl, it does not work for fruitsTheServiceBaseUrl.

Comment From: wilkinsona

Please note that OSS support for 2.7.x has ended. You should upgrade to 3.1.x or later as soon as possible.

You are applying Spring Boot's rules for binding from environment variables which applies to its @ConfigurationProperties support to @Value which is an entirely separate feature provided by Spring Framework.

To work with @Value, the environment variable should be named FRUITS_THE-SERVICE_BASE_URL. Alternatively, you could use a @ConfigurationProperties-annotated class for property binding and FRUITS_THESERVICE_BASE_URL will then work.

If you have any further questions, please follow up on Stack Overflow. As mentioned in the guidelines for contributing, we prefer to use GitHub issues only for bugs and enhancements.

Comment From: kaffeeinsel

It's not possible to set FRUITS_THE-SERVICE_BASE_URL as an env var on a unix machine, because hyphens are not allowed. But this works for me though as a workaround: FRUITS_THE_SERVICE_BASEURL