未找到 JMSTemplate Bean - Autowire 不起作用

问题描述 投票:0回答:1

昨天还好好的,突然就不行了。我什么也没改变。我是 JMS 新手,遵循本教程:Tutorial

我只想使用 Azure 服务总线发送和接收消息。

错误信息:

Field jmsTemplate in com.example.messagesender.MessageSenderApplication required a bean of type 'org.springframework.jms.core.JmsTemplate' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

行动:

考虑在配置中定义“org.springframework.jms.core.JmsTemplate”类型的 bean。

Pom.xml:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
            <version>6.0.0-beta.4</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-messaging-servicebus</artifactId>
            <version>7.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.jms/javax.jms-api -->
        <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>javax.jms-api</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.messaginghub</groupId>
            <artifactId>pooled-jms</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.azure.spring</groupId>
                <artifactId>spring-cloud-azure-dependencies</artifactId>
                <version>5.3.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Java 文件:

@SpringBootApplication
@EnableJms
public class MessageSenderApplication implements CommandLineRunner {

    private static final Logger LOGGER = LoggerFactory.getLogger(MessageSenderApplication.class);
    private static final String QUEUE_NAME = "queue";

    @Autowired
    private JmsTemplate jmsTemplate;


    public static void main(String[] args) {
        SpringApplication.run(MessageSenderApplication.class, args);
    }

        @Override
        public void run (String...args){
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }

        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage (String message){
            LOGGER.info("Message received: {}", message);
        }
}

与教程中的完全一样。

我将不胜感激。谢谢!

azure javabeans autowired spring-jms
1个回答
0
投票

您应该在 @Configuration 文件中创建一个 bean,但接收工厂作为参数。

 @Bean
 public JmsTemplate jmsTemplate(ConnectionFactory jmsConnectionFactory) {
     JmsTemplate template = new JmsTemplate();
     template.setConnectionFactory(jmsConnectionFactory);
     template.setPubSubDomain(true); // false for a Queue, true for a Topic
     return template;
 }
© www.soinside.com 2019 - 2024. All rights reserved.