繁体   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