2015-10-19 4 views
1

Я пытаюсь получить пример приложения, работающего для себя, поскольку я только начал играть с Spring Boot. Я создал свою службу, и следующий шаг - запустить сервер конфигурации, чтобы я мог динамически обновлять свойства. Однако мой конфигурационный сервер, похоже, не загружает свойства. Поэтому у меня есть следующие настройки:Spring config server не загружает собственные свойства

Config Сервер /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 класс

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) 

У меня также есть пружинный загрузочный успокоительный сервис, который я хочу, чтобы загрузить свойства, соблюдаемых config server. Успокоительный приложение выглядит следующим образом:

привет-сервис/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; 
    } 

привет-сервис/restful service, где я пытаюсь загрузить свойство omiited code для ясности

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

И мое приложение.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 (bootstrap not Bootstrap). В противном случае configserver не знает, какую конфигурацию нужно захватить.

+0

Сделал изменения для bootstrap.properties, но по-прежнему получает ту же ошибку. Как я могу проверить, что мой файл hello-service.properties был загружен сервером? – user1107753

+0

Теперь немного странно, похоже, работает. После добавления имени приложения в bootstrap также просто добавлено свойство непосредственно в контроллер как таковое @Value («$ очень-очень много») private String prop; – user1107753

Смежные вопросы