2015-10-19 107 views
1

我想为我自己创建一个示例应用程序,因为我刚开始玩弄Spring Boot。我创建了我的宁静服务,下一步是让配置服务器运行,以便我可以动态刷新这些属性。但是我的配置服务器似乎没有加载属性。所以,我有以下设置:春天配置服务器不加载本机属性

配置服务器/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> 

配置,服务器/应用类

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

配置服务器/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) 

我也有春天开机宁静的服务,我想加载由保留的属性配置服务器。 REST风格的应用程序如下:

你好服务/ 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> 

我打招呼服务/ app.class --ommited为清楚起见

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

你好服务一些代码/宁静服务,我尝试加载属性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 

所以,当我打的宁静终点迎接它抛出异常,如下

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) 

任何人什么,我在这里失踪的任何想法。我试图发布尽可能多的信息,但如果您需要更多信息,请询问。由于

回答

0

spring.application.name=hello-service需要bootstrap.properties去(引导自引导不)。否则,configserver不知道要抓取哪个配置。

+0

对bootstrap.properties进行了更改,但仍得到相同的错误。如何检查我的hello-service.properties文件是否已被服务器加载? – user1107753

+0

好吧有点奇怪现在似乎工作。在将应用程序名称添加到引导程序之后,也只是直接向控制器添加属性,如@Value(“$ {very-so-much}”) private String prop; – user1107753