Consul Core模块
自动装配的设置
META-INF/spring.factories
的内容:
# Auto Configuration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.consul.ConsulAutoConfiguration
类ConsulAutoConfiguration的内容:
@Configuration
@EnableConfigurationProperties
@ConditionalOnConsulEnabled
public class ConsulAutoConfiguration {......}
自动装配的生效条件
由 @ConditionalOnConsulEnabled 控制,类ConditionalOnConsulEnabled的内容:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Conditional(ConditionalOnConsulEnabled.OnConsulEnabledCondition.class)
public @interface ConditionalOnConsulEnabled {
class OnConsulEnabledCondition extends AllNestedConditions {
public OnConsulEnabledCondition() {
super(ConfigurationPhase.REGISTER_BEAN);
}
@ConditionalOnProperty(value = "spring.cloud.consul.enabled", matchIfMissing = true)
static class FoundProperty {}
@ConditionalOnClass(ConsulClient.class)
static class FoundClass {}
}
}
可以看到 @ConditionalOnConsulEnabled 生效的前提是:
- 配置项 "spring.cloud.consul.enabled" 生: true或者missing
- 能找到类 ConsulClient
自动装配的bean
bean consulProperties
@Bean
@ConditionalOnMissingBean
public ConsulProperties consulProperties() {
return new ConsulProperties();
}
具体配置看类 ConsulProperties:
@ConfigurationProperties("spring.cloud.consul")
public class ConsulProperties {
/** Consul agent hostname. 默认 'localhost'. */
@NotNull
private String host = "localhost";
/** Consul agent 端口. 默认 '8500'. */
@NotNull
private int port = 8500;
/** 是否开启 spring cloud consul */
private boolean enabled = true;
}
默认时连接 localhost 的 consul agent,如果需要直接连接到consul server,可以将 host/port 设置为目标地址即可。
bean consulClient
@Bean
@ConditionalOnMissingBean
public ConsulClient consulClient(ConsulProperties consulProperties) {
return new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
}
从配置信息中得到 host, port,然后创建 ConsulClient 对象。
其他bean
Health 和 retry 的暂时跳过,以后再细看。