我有一个 SqsQueueSender 来向 AWS 发送消息。我想测试一下这门课。我的想法是,它应该是一个 @Component
,注入(inject)到需要它的类中。重要的是,我想将 SqsQueueSender
的端点配置为在测试环境与生产环境中不同。
我一直在以各种不同的方式在类中移动@Autowired和@Component,但一定有一些基本的误解。这是我的最新配置:
package com.foo.fulfillmentApi.dao;
import com.amazonaws.services.sqs.AmazonSQSAsyncClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
import org.springframework.messaging.support.MessageBuilder;
@Component
public class SqsQueueSender {
private static final Logger LOGGER = LoggerFactory.getLogger(SqsQueueSender.class);
private final QueueMessagingTemplate queueMessagingTemplate;
@Autowired
AmazonSQSAsyncClient amazonSQSAsyncClient;
//This value is from /resources/application.properties
private @Value("${sqs.endpoint}") String endpoint;
public SqsQueueSender(AmazonSQSAsyncClient amazonSqsAsyncClient) {
amazonSqsAsyncClient.setEndpoint(endpoint);
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSqsAsyncClient);
}
public void send(String queueName, String message) {
this.queueMessagingTemplate.convertAndSend(queueName, MessageBuilder.withPayload(message).build());
}
}
启动时的错误消息状态
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.amazonaws.services.sqs.AmazonSQSAsyncClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
要实现 SqsQueueSender
,您必须传递 AmazonSQSAsyncClient
。我如何确保该组件可以访问该类型的现有 bean?
最佳答案
您需要创建一个配置类。在你的情况下,它会是这样的:
@Configuration
public class AWSConfig {
@Bean(name ="awsClient")
public AmazonSQSAsync amazonSQSClient() {
AmazonSQSAsyncClient awsSQSAsyncClient
= new AmazonSQSAsyncClient();
// set up the client
return awsSQSAsyncClient;
}
如果注入(inject)有问题,请在 qsQueueSender 中添加限定符:
@Autowired
@Qualifier("awsClient")
AmazonSQSAsyncClient amazonSQSAsyncClient;
您也可以使用 xml 配置来执行此操作,但由于您使用的是注释,因此这是更明智的方法。
关于java - 如何正确配置@Component类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41812104/