在使用 spring boot 开发中,会引入一些 xxx-starter,但是在配置文件中如果没有进行相关配置,就会出现项目启动过程中会报错或者其他问题。
下面以 nacos 为例
启动报错
com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried: java.net.ConnectException: Connection refused: connect
得知是默认访问本机的 nacos。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.1.0</version>
</dependency>
从 spring-configuration-metadata.json 中有如下配置
{
"name": "spring.cloud.nacos.discovery.server-addr",
"type": "java.lang.String",
"description": "nacos discovery server address.",
"sourceType": "com.alibaba.cloud.nacos.NacosDiscoveryProperties",
"defaultValue": "${spring.cloud.nacos.server-addr}"
}
{
"name": "spring.cloud.nacos.server-addr",
"type": "java.lang.String",
"description": "nacos server address.",
"defaultValue": "127.0.0.1:8848"
}
得知 spring.cloud.nacos.discovery.server-addr 的默认配置为 127.0.0.1:8848,即如果不对 spring.cloud.nacos.discovery.server-addr 进行配置,默认连接本机的 nacos。
spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration,\
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
org.springframework.context.ApplicationListener=\
com.alibaba.cloud.nacos.discovery.logging.NacosLoggingListener
得知进行自动装配的类有
NacosDiscoveryAutoConfiguration
NacosDiscoveryEndpointAutoConfiguration
NacosServiceRegistryAutoConfiguration
NacosDiscoveryClientConfiguration
NacosReactiveDiscoveryClientConfiguration
NacosConfigServerAutoConfiguration
LoadBalancerNacosAutoConfiguration
NacosServiceAutoConfiguration
即,如果想要引入 nacos 的依赖却不使用,在启动类中指明 @SpringBootApplication 的 exclude 为上述类即可。
@SpringBootApplication(exclude = {
com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration.class,
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration.class,
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration.class,
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration.class,
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration.class,
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration.class,
com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration.class,
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration.class
})