Web*_*ser 2 spring autowired rabbitmq spring-boot
我无法运行附加的Spring Boot采样器应用程序.它有一个AMQP启动器,需要RabbitMQ.从根本上说,它是一个简单的应用程序,只是向RabbitMQ Exchange发送一个消息,并绑定一个队列.我收到以下错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.company.messaging.MessageDeliveryManager com.company.exec.Application.messageDeliveryManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.company.messaging.MessageDeliveryManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
Run Code Online (Sandbox Code Playgroud)
Application.java
package com.company.exec;
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
MessageDeliveryManager messageDeliveryManager;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public void run(String... args) throws Exception {
messageDeliveryManager.sendMessage(String message);
}
}
Run Code Online (Sandbox Code Playgroud)
MessageDeliveryManager.java
package com.company.messaging;
public interface MessageDeliveryManager {
void sendMessage(String message);
}
Run Code Online (Sandbox Code Playgroud)
MessageDeliveryImpl.java
package com.company.messaging;
public class MessageDeliveryManagerImpl implements MessageDeliveryManager {
@Value("${app.exchangeName}")
String exchangeName;
@Value("${app.queueName}")
String queueName;
@Autowired
RabbitTemplate rabbitTemplate;
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
DirectExchange exchange() {
return new DirectExchange(exchangeName);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(queueName);
}
public void sendMessage(String message) {
rabbitTemplate.send(queueName, message);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以审查并提出我做错的建议,我将非常感激.
Art*_*lan 14
既然你有这样的包树:
com.company.exec
com.company.messaging
Run Code Online (Sandbox Code Playgroud)
并且只使用默认值@SpringBootApplication,它只是看不到您MessageDeliveryManager及其实现.那是因为@ComponentScan(上面的元注释@SpringBootApplication)只扫描当前包及其子包.
为了使它工作,你应该添加:
@SpringBootApplication
@ComponentScan("com.company")
Run Code Online (Sandbox Code Playgroud)
或者只是移动Application到根包 - com.company.
| 归档时间: |
|
| 查看次数: |
8673 次 |
| 最近记录: |