![](/img/trans.png)
[英]NoSuchBeanDefinitionException: No qualifying bean of type (repository)
[英]Spring NoSuchBeanDefinitionException: No Qualifying Bean of Type [@Repository class] available
我看到很多关于此错误消息的帖子,但没有一个提供对我有用的解决方案。
我正在编写一个需要我配置多个数据源的 Spring 应用程序。 我让所有这些都正常工作,但现在我需要导入我的队友构建的模块,该模块使用额外的数据源和多个存储库。 他们一直在他们的代码中使用这个模块,它似乎对他们有用,但是当我尝试运行我的代码时,我收到以下错误(由于工作原因,一些细节被掩盖了):
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.company.teammodule.repositories.StatsRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
//我不能粘贴代码,所以可能有错别字...
弹簧应用类:
package com.company.mymodule;
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackages={
"com.company.mymodule",
"com.company.mymodule.utils",
"com.company.mymodule.configuration",
"com.company.teammodule.repositories",
//I've been fiddling with packages here; I've added every package from the teammatemodule app and still get the error described})
@public class MyModuleApplication
{
public static void main(String[] args) { SpringApplication.run(MyModuleApplication.class, args); }
}
我使用 teammatemodule 的班级:
package com.company.mymodule.utils;
@Component
public class TeammateModuleUtil {
@Autowired
private TeammateModuleConfiguration config; //This class contains an object of another class which references the problem repository
@Value("${applicationName})
private final String applicationName;
public TeammateModuleUtil()
{
try {
config.setApplicationName(applicationName);
config.loadConfiguration();
}
catch (Exception e) {
//Error handling
}
}
}
TeammateModuleConfiguration 类:
package com.company.teammatemodule
@Component
public class TeammateModuleConfiguration extends ConfigurationBase {
@Autowired
TeammateModuleServiceData data; //This class contains a reference to the problem repository
@Autowired
Utilities util;
@Autowired
ConfigurationRepository configurationRepository;
public void loadConfiguration() throws Exception {
try {
this.alConfigure = this.configurationRepository.findByConfigureIdApplicationName(this.applicationName);
} catch (Exception e) {
//Error handling
}
}
}
这是具有问题参考的类:
package com.company.teammatemodule;
@Component
public class TeammateModuleServiceData {
@Autowired
StatsRepository statsRepository //This is the repo the code can't find a bean for
@Autowired
MessageAuthorizationRepository messageAuthorizationRepository;
@Autowired
LogMessagesRepository logMessagesRepository;
@Autowired
Utilities util;
//Class methods
}
这是一个很好的衡量标准的存储库类:
package com.company.teammatemodule.repositories;
@Repository
public interface StatsRepository extends JpaRepository<Stats, StatsId> {
@Procedure(
procedureName = "schema.log_service_stats",
outputParameterName = "o_stats_id"
)
String logServiceStats(@Param("i_request_payload") String var1, @Param("i_response_payload") String var2, @Param("i_operation_name") String var3, @Param("i_stats_id") String var4);
@Procedure(procedureName = "schema.update_service_stats)
void updateServiceStats(@Param("i_request_payload") String var1, @Param("i_response_payload") String var2, @Param("i_operation_name") String var3, @Param("i_stats_id) String var4);
}
上面的存储库是我尝试启动应用程序时找不到的存储库。 我已经确认并尝试过:主要应用有@SpringApplication
注释,和所有其他相关的类要么@Component
, @RestController
,或@Repository
,所以我不认为这是不被贴上了某个组件的问题bean... StatsRepository
中的其他存储库都没有给我带来问题,但我猜StatsRepository
只是第一个被引用的存储库 我的属性文件中唯一的属性是 applicationName 和与StatsRepository
无关的数据源。 我没有在那里列出任何包或排除项。 我已经在@ComponentScan ( basepackages = {//packages} )
以及@SpringApplication( scanBasePackages = {//packages} )
指定了所有包我已经尝试通过在我的 SpringAplication 类中使用以下注释来排除 spring 的自动配置:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class })
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
所以我不认为这是缺少@Component
或其他 bean 注释,并且尽我所能指定存储库 bean 所在的包并覆盖 Spring 的内置自动配置工具......但是应用程序还是找不到豆子。
谢谢你的帮助!
看起来这可能只是一个简单的拼写错误: com.company.teammodule.repositories <- 组件扫描 com.company.teammatemodule.repositories <- 在 Repository 类中指定的包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.