gpt4 book ai didi

spring-boot - Spring Cloud 领事 : Unable to override defaults in ConsulProperties

转载 作者:行者123 更新时间:2023-12-04 17:17:12 25 4
gpt4 key购买 nike

我正在使用 spring cloud consul 1.0.0.M5 和 spring boot 1.3.2。 spring cloud consul 用于连接 consul 代理的默认主机和端口是 localhost:8500。我想改变这一点,但到目前为止我尝试过的每一种方法都不尊重这些设置。

我查看了 spring cloud consul 的源代码,ConsulProperties 是使用 spring-boot 中的 @ConfigurationProperties 以属性前缀 spring.cloud.consul 读取的。

这是 ConsulProperties 在 Spring Cloud 源中的声明:

/**
* @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";
}

以及如何将其注入(inject) spring cloud consul 源以定义向 consul 代理发出 http 请求的 ConsulClient:
/**
* @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());
}

...

我在 application.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 bean,因为它在 spring 配置中被标记为 @ConditionalOnMissingBean,但是这个 bean 也没有被读取。在这种情况下,我不得不绕过类型系统,因为所有字段都是私有(private)的(呃)。这是我的代码中配置类的片段:
...
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 consul 使用什么主机和端口连接到 consul 代理?

最佳答案

迁移评论以回答:

如果您使用 spring-cloud-starter-consul-allspring-cloud-starter-consul-config ,您需要将值放入 bootstrap.properties .

这里是 documentation .要点,spring.application.name以及连接领事所需的一切。

关于spring-boot - Spring Cloud 领事 : Unable to override defaults in ConsulProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com