java - Springboot 无法通过 autowired 注解初始化和注入第三方 bean
问题描述
我的配置类有问题。根据日志的实际问题是:
> Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-05-10 10:47:47.622 ERROR 10728 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field queue in com.example.taskgenerator.Sender required a bean of type 'org.springframework.amqp.core.Queue' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.amqp.core.Queue' in your configuration.
我第一次使用带有 RabbitMQ 的 springboot 队列服务 sdk。
package com.example.taskgenerator;
import org.springframework.amqp.core.Queue;
@Configuration
public class TaskGeneratorConfig {
@Bean
public Queue queue() {
return new Queue("simple-queue");
}
}
queue 是 Sender 类的依赖项。
package com.example.taskgenerator;
import org.springframework.amqp.core.Queue;
@Component
public class Sender {
@Autowired
private Queue queue;
}
请帮忙。
编辑 :
添加我的主要课程:
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
@SpringBootApplication
//@EnableScheduling
//@EnableAsync
public class FileDumpReaderApplication {
@Profile("usage_message")
@Bean
public CommandLineRunner usage() {
return new CommandLineRunner() {
@Override
public void run(String... args) throws Exception {
System.out.println("This app uses Spring profiles to control its behaviour.");
System.out.println("Sample usage : java -jar readerapp.jar --spring.profiles.active=hello_world,sender");
}
};
}
@Profile("!usage_message")
@Bean
public CommandLineRunner usageTwo() {
return new AppRunner();
}
public static void main(String[] args) {
SpringApplication.run(FileDumpReaderApplication.class, args);
}
}
和命令行运行器类:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ConfigurableApplicationContext;
public class AppRunner implements CommandLineRunner {
@Autowired
private ConfigurableApplicationContext context;
@Autowired
private Sender sender;
@Override
public void run(String... args) throws Exception {
sender.send();
//context.close();
}
}
注意:所有类都在同一个包中。
解决方案
扫描您的包 -
@SpringBootApplication(scanBasePackages={"com.example.taskgenerator"}) 并在 AppRunner 类上给出注释(@Component)。
您必须扫描您的包,以便在应用程序启动时它们成为 ApplicationContext 的一部分。
推荐阅读
- c# - 如何从另一个“项目”中引用项目?
- java - 如何找到从文件中进行的大多数调用的时间段
- c++ - 将 Cspice 与 mingw 一起使用
- c# - 检查用户是否通过 C# 中的 CalendarDatePicker 输入了日期时间值
- ios - 可以在 Safari 中访问原深感摄像头吗?
- scrapy - 刮擦 | 如何在没有 urllib 的情况下从请求中获得响应?
- sql - 用于证明候选键约束在 R(ABCD) 中成立的 SQL 语句
- java - 使用 Ionic 4 访问 JAR 文件中的 Java API
- node.js - Angular、电子、打字稿和机器人
- javascript - 为什么 Node.js 不能处理来自 Vue.js 的请求?