@EnableDiscoveryClient&@EnableEurekaClient

上面俩个注解相信很多人都不会很陌生,在使用eureka或其组建作为注册中心时,可以使用@EnableDiscoveryClient,如果用的注册中心时eureka同时还可以使用@EnableEurekaClient,但是一次偶然的机会,我忘记加该注解了,结果意外的发现照样可以注册上,于是,这篇博文就来了

先来回顾一下注解的使用,约定由于配置,万变不离其宗

1)pom引入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2)主启动类加上注解
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.guwukeji.varysucenter.dao")
@EnableCaching
public class VarysUcenterApplication extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(VarysUcenterApplication.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(VarysUcenterApplication.class, args);
	}
}
3)application.yml加上配置项
eureka:
  client:
    serviceUrl:
      defaultZone: http://varys:varys12345@172.16.60.8:8761/eureka/
      #defaultZone: http://varys:varys12345@localhost:8761/eureka/
  instance:
    hostname: ${spring.cloud.client.ip-address}
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

那么来交流一下,为什么不加注解也是可以的呢?

从Spring Cloud Edgware开始,@EnableDiscoveryClient@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

分析一下:但Spring Cloud为什么要这么设计/改进呢?

这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果——例如:在开发环境中,不注册到Eureka Server上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们又希望能够享受服务发现的优势——服务消费者无需知道服务提供者的绝对地址。为适应该需求,Spring Cloud Commons进行了改进,相关Issue:https://github.com/spring-cloud/spring-cloud-commons/issues/218

如不想将服务注册到Eureka Server,只需在application*.yml设置

spring.cloud.service-registry.auto-registration.enabled=false 

或者在主启动类加上注解

@EnableDiscoveryClient(autoRegister = false)

摘自文章:Spring Cloud Edgware新特性之七:可选的EnableDiscoveryClient注解

原创文章转载请注明出处: springCloud拾遗1-可抹去的注解@EnableDiscoveryClient