2016-01-29 3 views
4

Я использую Spring Cloud Consul 1.0.0.M5 и весеннюю загрузку 1.3.2. По умолчанию хост и порт, которые использует консул весеннего облака для подключения к агенту consul, - localhost: 8500. Я хочу изменить это, но каждый метод, который я пробовал до сих пор, не учитывает настройки.spring-cloud-consul: Невозможно переопределить значения по умолчанию в ConsulProperties

Я посмотрел на источник для консула весеннего облака, и ConsulProperties читается с использованием @ConfigurationProperties от весенней загрузки при префиксе свойства spring.cloud.consul.

Вот декларация в источнике облака весеннего для ConsulProperties:

/** 
* @author Spencer Gibb 
*/ 
@ConfigurationProperties("spring.cloud.consul") 
@Data 
public class ConsulProperties { 
    @NotNull 
    private String host = "localhost"; 

    @NotNull 
    private int port = 8500; 

    private boolean enabled = true; 

    private String prefix = "config"; 
} 

и как он вводится в источнике весны облака консула определить ConsulClient, что делает запрос HTTP консула агент:

/** 
* @author Spencer Gibb 
*/ 
@Configuration 
@EnableConfigurationProperties 
@ConditionalOnConsulEnabled 
public class ConsulAutoConfiguration { 

    @Bean 
    @ConditionalOnMissingBean 
    public ConsulProperties consulProperties() { 
     return new ConsulProperties(); 
    } 

    @Bean 
    @ConditionalOnMissingBean 
    public ConsulClient consulClient() { 
     return new ConsulClient(consulProperties().getHost(), consulProperties() 
       .getPort()); 
    } 

... 

Я поместил следующее в свои приложения.properties, но каждая комбинация игнорируется, а вместо этого используются «localhost» и «8500» по умолчанию. Я бы подумал, что в этом случае будут соблюдаться «spring.cloud.consul.host» и «spring.cloud.consul.port».

spring.cloud.consul.config.host=172.17.42.1 
spring.cloud.consul.config.port=8500 
config.host=172.17.42.1 
config.port=8500 
spring.cloud.consul.host=172.17.42.1 
spring.cloud.consul.port=8500 

Я также попытался явным определение боба ConsulProperties, поскольку он помечен как @ConditionalOnMissingBean в конфигурации родниковой, но этот компонент не читается ни. В этом случае мне пришлось обходить систему типов, потому что все поля являются частными (ть). Вот фрагмент из класса конфигурации в моем коде:

... 
import org.apache.commons.lang3.reflect.FieldUtils; 
... 
@Configuration 
@EnableDiscoveryClient 
@Order(Ordered.HIGHEST_PRECEDENCE) 
@Priority(Ordered.HIGHEST_PRECEDENCE) 
public class ConsulConfig { 
... 

    @Bean 
    public ConsulProperties consulProperties() { 
     ConsulProperties props; 

     try { 
      props = new ConsulProperties(); 

      String host = resolveConsulHost(); 
      int port = this.consulPort; 

      FieldUtils.writeField(props, "host", host,true); 
      FieldUtils.writeField(props, "port", port,true); 

     } 
     catch(Exception e) { 
      logger.warn("Unable to set ConsulProperties - using defaults",e); 
      props = new ConsulProperties(); 
     } 

     logger.info("Using consulProperties={}",props); 

     return props; 

    } 

... 
} 

@Configuration 
@EnableAutoConfiguration 
@EnableConfigurationProperties 
@ComponentScan 
public class Application { 

    private final Logger logger = LoggerFactory.getLogger(getClass()); 
    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 
    } 
... 
} 

Как я могу настроить то, что весна облако Консул использует для хоста и порт для подключения к консулу агенту?

+1

Если вы используете Spring-cloud-starter-consul-all или spring-cloud-startter-consul-config, вам нужно поместить значения в 'bootstrap.properties'. – spencergibb

+0

@spencergibb Это сделало это для меня! Не знал о свойствах загрузки. От чтения немного, Мне непонятно, какие свойства я должен поместить в application.properties и которые идут в bootstrap.properties. Все ли весна. Loud. * Предполагается, что в бутстрапе? – GameSalutes

ответ

7

Migrated комментарий ответить:

Если вы используете spring-cloud-starter-consul-all или spring-cloud-starter-consul-config, вам нужно поместить значения в bootstrap.properties.

Адрес documentation. Суть, spring.application.name и все необходимое для подключения к консулу.

+0

Не проверял 'bootstrap.properties',' bootstrap.yml' отлично работает. Благодарю. – Daria

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