簡體   English   中英

Spring NoSuchBeanDefinitionException:沒有可用類型 [@Repository class] 的 Qualifying Bean

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM