SpringCloud (version=2021.0.1)中說Eureka 默認是使用RestTemplate的,但我在使用時,發現每次啟動都是Jersey.
在源码中可以看到,RestTemplate DiscoveryClient的Bean配置如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| @Bean @ConditionalOnClass(name = "org.springframework.web.client.RestTemplate") @ConditionalOnMissingClass("com.sun.jersey.api.client.filter.ClientFilter") @ConditionalOnMissingBean(value = { AbstractDiscoveryClientOptionalArgs.class }, search = SearchStrategy.CURRENT) @ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true, havingValue = "false") public RestTemplateDiscoveryClientOptionalArgs restTemplateDiscoveryClientOptionalArgs(TlsProperties tlsProperties, EurekaClientHttpRequestFactorySupplier eurekaClientHttpRequestFactorySupplier) throws GeneralSecurityException, IOException { logger.info("Eureka HTTP Client uses RestTemplate."); RestTemplateDiscoveryClientOptionalArgs result = new RestTemplateDiscoveryClientOptionalArgs( eurekaClientHttpRequestFactorySupplier); setupTLS(result, tlsProperties); return result; }
@Bean @ConditionalOnClass(name = "com.sun.jersey.api.client.filter.ClientFilter") @ConditionalOnMissingBean(value = AbstractDiscoveryClientOptionalArgs.class, search = SearchStrategy.CURRENT) public MutableDiscoveryClientOptionalArgs discoveryClientOptionalArgs(TlsProperties tlsProperties) throws GeneralSecurityException, IOException { logger.info("Eureka HTTP Client uses Jersey"); MutableDiscoveryClientOptionalArgs result = new MutableDiscoveryClientOptionalArgs(); setupTLS(result, tlsProperties); return result; } ```
因此,我在POM中需要加上 spring-boot-starter-web
```XML <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
|
同时,还需要exclude Jersey.
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <exclusions> <exclusion> <artifactId>jersey-client</artifactId> <groupId>com.sun.jersey</groupId> </exclusion> </exclusions> </dependency>
|
如果要使用Jersey,则需要引入Jersey相关包
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>3.0.4</version> </dependency>
<dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-apache-client4</artifactId> <version>1.19.4</version> </dependency>
|