Я использую 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);
}
...
}
Как я могу настроить то, что весна облако Консул использует для хоста и порт для подключения к консулу агенту?
Если вы используете Spring-cloud-starter-consul-all или spring-cloud-startter-consul-config, вам нужно поместить значения в 'bootstrap.properties'. – spencergibb
@spencergibb Это сделало это для меня! Не знал о свойствах загрузки. От чтения немного, Мне непонятно, какие свойства я должен поместить в application.properties и которые идут в bootstrap.properties. Все ли весна. Loud. * Предполагается, что в бутстрапе? – GameSalutes