在测试伪装功能时获得异常。
*********************
应用程序无法启动
*********************
说明:
com.in28minutes.microservices.currencyconversionservice.CurrencyConversionController中的field currencyConversionServiceProxy需要一个类型为com.in28minutes.microservices.currencyconversionservice.CurrencyConversionServiceProxy的bean。
注入点具有以下注释:
-@ org.springframework.beans.factory.annotation.Autowired(required = true)
POM.xml
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
....
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
CurrencyConversionServiceApplication.java
@SpringBootApplication
@EnableFeignClients
public class CurrencyConversionServiceApplication {
public static void main(String[] args) {
SpringApplication.run(CurrencyConversionServiceApplication.class, args);
}
}
CurrencyConversionController.java
@RestController
public class CurrencyConversionController {
@Autowired
private CurrencyConversionServiceProxy currencyConversionServiceProxy;
@GetMapping("/currency-converter-feign/from/{from}/to/{to}/quantity/{quantity}")
public CurrencyConversionBean convertCurrencyFeign(@PathVariable String from, @PathVariable String to,
@PathVariable BigDecimal quantity) {
CurrencyConversionBean response = currencyConversionServiceProxy.retrieveExchangeValue(from, to);
return new CurrencyConversionBean(response.getId(), response.getFrom(), response.getTo(),
response.getConversionMultiple(), quantity, quantity.multiply(response.getConversionMultiple()),
response.getPort());
}
}
CurrencyConversionServiceProxy.java
@FeignClient(name="currency-exchange-service", url="localhost:8000")
public interface CurrencyConversionServiceProxy {
@GetMapping("/currency-exchange/from/{from}/to/{to}")
public CurrencyConversionBean retrieveExchangeValue(@PathVariable("from") String from, @PathVariable("to") String to);
}
日志
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
2019-12-28 14:19:27.788 INFO 11444 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator :
Fetching config from server at : http://localhost:8888
2019-12-28 14:19:28.805 INFO 11444 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator :
Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available
2019-12-28 14:19:28.805 WARN 11444 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator :
Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/currency-
conversion-service/default": Connection refused: connect; nested exception is
java.net.ConnectException: Connection refused: connect
2019-12-28 14:19:28.805 INFO 11444 --- [ restartedMain] m.c.CurrencyConversionServiceApplication :
No active profile set, falling back to default profiles: default
2019-12-28 14:19:28.921 INFO 11444 --- [ restartedMain] o.s.cloud.context.scope.GenericScope :
BeanFactory id=6fe0f2bd-0b38-367c-af3b-d79d3b2d9d52
2019-12-28 14:19:28.937 WARN 11444 --- [ restartedMain] org.apache.tomcat.util.modeler.Registry :
The MBean registry cannot be disabled because it has already been initialised
2019-12-28 14:19:28.968 INFO 11444 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer :
Tomcat initialized with port(s): 8100 (http)
2019-12-28 14:19:28.968 INFO 11444 --- [ restartedMain] o.apache.catalina.core.StandardService :
Starting service [Tomcat]
2019-12-28 14:19:28.984 INFO 11444 --- [ restartedMain] org.apache.catalina.core.StandardEngine :
Starting Servlet engine: [Apache Tomcat/9.0.29]
2019-12-28 14:19:28.984 INFO 11444 --- [ restartedMain] o.a.c.c.C.[Tomcat-16].[localhost].[/] :
Initializing Spring embedded WebApplicationContext
2019-12-28 14:19:28.984 INFO 11444 --- [ restartedMain] o.s.web.context.ContextLoader :
Root WebApplicationContext: initialization completed in 178 ms
2019-12-28 14:19:28.999 WARN 11444 --- [ restartedMain] ConfigServletWebServerApplicationContext :
Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name
'currencyConversionController': Unsatisfied dependency expressed through field
'currencyConversionServiceProxy'; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
'com.in28minutes.microservices.currencyconversionservice.CurrencyConversionServiceProxy' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
2019-12-28 14:19:29.015 INFO 11444 --- [ restartedMain] o.apache.catalina.core.StandardService :
Stopping service [Tomcat]
2019-12-28 14:19:29.015 INFO 11444 --- [ restartedMain] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with
'debug' enabled.
2019-12-28 14:19:29.093 ERROR 11444 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field currencyConversionServiceProxy in
com.in28minutes.microservices.currencyconversionservice.CurrencyConversionController required a bean
of type 'com.in28minutes.microservices.currencyconversionservice.CurrencyConversionServiceProxy'
that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type
'com.in28minutes.microservices.currencyconversionservice.CurrencyConversionServiceProxy' in your
configuration.
我已经测试了在端口8000上运行的服务仅在“ currency-exchange-service”名称下运行良好。
答案 0 :(得分:2)
尝试在@EnableFeignClients批注中指定Feign客户端的类名。例如,在您的情况下,它应如下所示:
@SpringBootApplication
@EnableFeignClients(clients = {CurrencyConversionServiceProxy.class})
public class CurrencyConversionServiceApplication
答案 1 :(得分:0)
问题在于在服务器运行时添加了以下依赖项。 因此,在pom.xml中进行任何更改后,手动重新启动服务器应该可以解决该问题。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
答案 2 :(得分:0)
对我来说,Spring Cloud Dependency的更新有所帮助。通常,保持最新的Spring Boot依赖关系和Spring Cloud依赖关系很重要。
答案 3 :(得分:0)
您可以使用此依赖关系,而不仅仅是打开配置。
<!-- add by WanChengHe 20190507 Increase eureka dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- Add a feign dependency for inter-service calls add by WanChengHe 20190508 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
答案 4 :(得分:0)
对于 Hoxton.SR1
将FeignClient的实现类FeignClientsConfiguration.class添加到注释中。
@FeignClient(name="currency-exchange-service", url="localhost:8000",configuration=FeignClientsConfiguration.class)
答案 5 :(得分:0)
我刚刚进行了 Maven 更新和全新安装,之后它开始正常运行。
答案 6 :(得分:0)
遇到类似的问题,是因为找不到自动配置。客户端配置在它们自己的模块中定义,该模块由 Spring Boot 应用程序导入。解决方案是添加 resources/META-INF/spring.factories
文件,该文件具有:org.springframework.boot.autoconfigure.EnableAutoConfiguration=<path-to-@Configuration @EnableFeignClients>
答案 7 :(得分:0)
如果您使用的是父项目,请务必从父 POM 中删除
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
答案 8 :(得分:0)
您需要为 FeignClients 指定路径,因为 @EnableFeignClients 不会在内部使用组件扫描来识别应用程序中的 FeignClients
soln->
@EnableFeignClients("com.in28minutes.microservices.currencyconversionservice")
试试下面提到的更新后的代码
@SpringBootApplication
@EnableFeignClients("com.in28minutes.microservices.currencyconversionservice")
public class CurrencyConversionServiceApplication {
public static void main(String[] args) {
SpringApplication.run(CurrencyConversionServiceApplication.class, args);
}
}