2015-10-19 104 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