I am using spring cloud consul 1.0.0.M5 and spring boot 1.3.2. By default, the host and port that the spring cloud consul uses to connect to the consul agent is localhost: 8500. I want to change this, but every method I have tried so far does not take into account the settings.
I looked at the source for the spring consul and ConsulProperties is read using @ConfigurationProperties from spring-boot in the prefix of the spring.cloud.consul property.
Here is the ad in spring cloud source for ConsulProperties:
@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";
}
and how it is injected into the spring consul source to determine the ConsulClient that makes the HTTP request to the consul agent:
@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, @ConditionalOnMissingBean spring, bean . , (). :
...
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 ?