找不到存储库 Spring R2DBC

Posted

技术标签:

【中文标题】找不到存储库 Spring R2DBC【英文标题】:Repository could not be found Spring R2DBC 【发布时间】:2020-10-24 19:11:32 【问题描述】:

在我的代码中,我遇到了一个奇怪的问题,即我的一个存储库在我的控制器中没有被识别并在启动期间抛出这个错误。

com.test.pack.controller.ModulesController 中构造函数的参数 0 需要一个找不到的 'com.test.pack.repository.ModuleRepository' 类型的 bean。

这是我的控制器

@RestController
@RequestMapping("/modules")
class ModulesController(private val moduleRepository: ModuleRepository) 
    @GetMapping
    suspend fun getAllModules(): = Response(moduleRepository.findAllPurchasableModule().toList())

这是我的仓库

interface ModuleRepository: Repository<Module, Int> 
    suspend fun getByAccountId(accountId: Long): Flow<Module>
    suspend fun findAllPurchasableModule(): Flow<Module>

impl

class ModuleRepositoryImpl(private val databaseClient: DatabaseClient) : ModuleRepository 

    override suspend fun getByAccountId(accountId: Long): Flow<Module> 

        return databaseClient.execute("SELECT * FROM mod WHERE actid = :acct").bind("accountId", acct).asType<Module>().fetch().flow()
    

    override suspend fun findAllPurchasableModule(): Flow<Module> 

        return databaseClient.execute("SELECT * FROM modules").asType<Module>().fetch().flow()
    

这是我的文件夹结构

com
    test
        pack
            controller
                ModulesController
            repository
                ModuleRepository
                UserRepository
                impl
                    ModuleRepositoryImpl
                    UserRepositoryImpl 

我也在为User 存储库做同样的事情,它正在工作。但是,如果我将 @Repository("moduleRepository") 放在 impl 类的顶部,那么它就可以工作。但我不明白这个 ModuleRepository 有什么特别之处,与其他概念相同的概念不适用于这个。

【问题讨论】:

向我们展示您的文件夹结构 你在repository类上面添加@Repository注解了吗? @ThomasAndolf 我添加了文件夹结构。 【参考方案1】:

作为最佳实践,您应始终使用 @Repository 和其他注释(如 @Component、@Service 等)以便 Spring 在类路径扫描期间轻松检测并将其作为 bean 注册到应用程序上下文中.

用户存储库工作的原因可能是因为(不包括 moduleRepository )它是当前代码中存在的唯一存储库类型 bean。

【讨论】:

以上是关于找不到存储库 Spring R2DBC的主要内容,如果未能解决你的问题,请参考以下文章

带有 MySQL 的 Spring Boot R2DBC - 异常:找不到表

Spring data r2dbc:与 mysql 连接时出现问题 - 找不到“r2dbcEntityTemplate”

找不到类型的属性...自定义 Spring 数据存储库

Spring Boot Kotlin 找不到存储库 Bean

在编译时找不到Spring数据存储库

Spring Boot 应用程序在控制器中找不到定义的存储库