spring config server未加载本机属性

时间:2015-10-19 14:42:01

标签: spring spring-boot spring-cloud

我正在努力让一个示例应用程序为我自己工作,因为我刚刚开始使用Spring Boot。我创建了我的restful服务,下一步是运行配置服务器,以便我可以动态刷新属性。但是我的配置服务器似乎没有加载属性。所以我有以下设置:

配置服务器/pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-parent</artifactId>
        <version>1.0.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <artifactId>config-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

    </dependencies>
</project>

Config-Server / Application class

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigurationServerApplication {

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

config-server /application.yml

server:
  port: ${PORT:8889}
logging:
  levels:
    org.springframework.boot.env.PropertySourcesLoader: TRACE
    org.springframework.web: DEBUG
spring:
  cloud:
    config:
      server:
        native:
          searchLocations:  classpath:/config
  profiles:
    active: native 
#conf: /Users/jlong/work/bootiful/bootiful-microservices/code/spring-doge-microservice-configuration



#my:
 # property:******************myvalue***************************

在src / main / resources中我有一个config目录,里面有一个hello-service.properties文件,其中包含以下内容:

very-so-much=testing

配置服务器启动正常,并在日志显示

时侦听端口8889
2015-10-19 15:10:32.490  INFO 7712 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,type=ConfigurationPropertiesRebinder]
2015-10-19 15:10:32.499  INFO 7712 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.bootstrap.config:name=refreshEndpoint,type=RefreshEndpoint]
2015-10-19 15:10:32.504  INFO 7712 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2015-10-19 15:10:32.620  INFO 7712 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8889 (http)
2015-10-19 15:10:32.622  INFO 7712 --- [           main] doge.ConfigurationServerApplication      : Started ConfigurationServerApplication in 4.352 seconds (JVM running for 5.069)

我还有一个spring boot restful服务,我想加载配置服务器维护的属性。宁静的申请如下:

您好服务/ pom.xml的

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sample.springboot</groupId>
    <artifactId>spring-restful-tutorial</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-restful-tutorial</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.6.RELEASE</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>1.0.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

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


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>



    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

我的hello-service / app.class - 为了清晰起见,提供了一些代码

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private CustomerRepository repository;

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

    @Bean
    @RefreshScope
    CustomerProps customerProps( @Value("${very-so-much}") String exclamations) {
        CustomerProps p = new CustomerProps();
        p.setText(exclamations);
        return p;
    }

hello-service / restful service我尝试加载属性omiited代码以保持清晰

@RestController
@RequestMapping("/customer")
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    //TODO switch to autowired annotation
    private CustomerRepository repository;
    private final GridFsTemplate fs;
    private CustomerProps props;

    @Autowired
    public GreetingController(CustomerRepository repository, GridFsTemplate gridFileSystem, CustomerProps props) {
        this.repository = repository;
        this.fs = gridFileSystem;
        this.props = props;
    }

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        name = props.getText();
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }

我的application.properties

server.port=${PORT:9001}    
spring.profiles.active=native

bootstrap.properties

spring.application.name=hello-service
spring.cloud.config.uri=http://localhost:8889

因此,当我点击restful endpoint问候语时,它会抛出异常,如下所示

2015-10-19 15:21:41.292  INFO 8140 --- [nio-9001-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2015-10-19 15:21:41.323  INFO 8140 --- [nio-9001-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 31 ms
2015-10-19 15:22:29.727 ERROR 8140 --- [nio-9001-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'very-so-much' in string value "${very-so-much}"] with root cause

java.lang.IllegalArgumentException: Could not resolve placeholder 'very-so-much' in string value "${very-so-much}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:955)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)

任何关于我在这里缺少什么的想法。我试图发布尽可能多的信息,但如果您需要任何进一步的信息,请询问。感谢

1 个答案:

答案 0 :(得分:1)

spring.application.name=hello-service需要进入bootstrap.properties(bootstrap not Bootstrap)。否则,configserver不知道要抓取哪个配置。