WhatAKitty
WhatAKitty

Reputation: 348

Spring cloud config cannot load native config file unless the filename is application

Something strange happened to me. I have no idea about how to solve it that the spring cloud config cannot load native or cloud config file unless it's filename is 'application.yml/application.properties'.

The below code is my configuration:

pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath/>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>micro-certification-config-center</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

ConfigServer:

@SpringBootApplication
@EnableConfigServer
public class ConfigServer {

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

}

application.yml:

server:
  port: 8000

spring:
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/shared
  profiles:
     active: native

The shared folder structor:
resources
-- shared
-- -- application-dev.yml
-- -- sms-dev.yml

It looks good and run well with no errors, but when I visit http://127.0.0.1:8000/configCenter/dev/master, it only shows the application property source.

The response:

{
    "name": "configCenter",
    "profiles": [
        "dev"
    ],
    "label": "master",
    "version": null,
    "state": null,
    "propertySources": [
        {
            "name": "classpath:/shared/application-dev.yml",
            "source": {
                "logging.level.org.springframework.security": "INFO",
                "eureka.instance.prefer-ip-address": true,
                "eureka.client.serviceUrl.defaultZone": "http://registry:8761/eureka/",
                "security.oauth2.resource.user-info-uri": "http://auth-service:5000/uaa/users/current",
                "spring.rabbitmq.host": "rabbitmq"
            }
        }
    ]
}

The server console:

2017-08-24 22:34:08.055  INFO 30010 --- [nio-8000-exec-4] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4a931797: startup date [Thu Aug 24 22:34:08 CST 2017]; root of context hierarchy
2017-08-24 22:34:08.062  INFO 30010 --- [nio-8000-exec-4] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2017-08-24 22:34:08.075  INFO 30010 --- [nio-8000-exec-4] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: classpath:/shared/application-dev.yml
2017-08-24 22:34:08.075  INFO 30010 --- [nio-8000-exec-4] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@4a931797: startup date [Thu Aug 24 22:34:08 CST 2017]; root of context hierarchy

All above shows the 'application.yml' file only worked.

Can someone help me? Thanks very much!

Upvotes: 1

Views: 1507

Answers (2)

WhatAKitty
WhatAKitty

Reputation: 348

As @spencergibb said, if I want to load sms-dev.yml, I should rename application.name to sms.

Upvotes: 0

Kenny Tai Huynh
Kenny Tai Huynh

Reputation: 1599

The external config can help you that. The detail is here: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

You can change this default application config to the external one by command like in the guide line:

If you don’t like application.properties as the configuration file name you can switch to another by specifying a spring.config.name environment property. You can also refer to an explicit location using the spring.config.location environment property (comma-separated list of directory locations, or file paths).

$ java -jar myproject.jar --spring.config.name=myproject or

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

Or in your code you can put it like:

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

Hope this help.

Upvotes: 1

Related Questions