我有一個SqsQueueSender將消息發送給AWS。我想測試這個類。我的想法是,它應該是一個@Component
,它被注入到需要它的類中。重要的是,我想將SqsQueueSender
的端點配置爲在測試與生產環境中不同。如何正確配置@Component類
我一直在各種不同的方式移動@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());
}
}
錯誤消息對引起啓動狀態
: org.springframework.beans.factory.NoSuchBeanDefinitionException:無類型 「com.amazonaws的 合格的豆。 services.sqs.AmazonSQSAsyncClient'available:expected 至少有1個bean,它們有資格作爲autowire候選者。依賴 註解:{}
要實現SqsQueueSender
你必須通過一個AmazonSQSAsyncClient
。我如何確保此組件可以訪問該類型的現有bean?
對aws不瞭解。但'AmazonSQSAsyncClient'定義是一個bean在哪裏? – Patrick
如果我理解你的問題,那麼這個類在我的項目中沒有被定義爲@ @ Bean。你如何從你導入的現有類創建@Bean? –