[英]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.