You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot费用追踪项目启动报错:找不到CategoryRepository类型Bean

费用追踪项目启动错误排查与解决

问题概述

搭建费用追踪(expense tracker)项目基础结构后,启动时出现Bean找不到的错误,无法正常启动应用。

错误信息

APPLICATION FAILED TO START

描述:
com.app.expensetracker.service.CategoryServiceImpl中的categoryRepository字段需要类型为'com.app.expensetracker.dao.CategoryRepository'的Bean,但未找到。
注入点带有以下注解:

  • @org.springframework.beans.factory.annotation.Autowired(required=true)

建议操作:
考虑在配置中定义类型为'com.app.expensetracker.dao.CategoryRepository'的Bean。

相关代码片段

CategoryRepository

package com.app.expensetracker.dao;

import com.app.expensetracker.entity.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CategoryRepository extends JpaRepository<Category, String> {

}

Category实体类

package com.app.expensetracker.entity;

import jakarta.persistence.*;
import lombok.*;
import java.util.List;

@Entity
@Table(name = "category")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString

public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="cat_id",nullable = false)
    private String cat_id;

    @Column(name="categoryName")
    private String categoryName;

    @Column(name="users")
    private List<String> users;

//    @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
//    @JoinColumn(name = "user_id")
//    private  User user;

}

CategoryService接口

package com.app.expensetracker.service;

import com.app.expensetracker.dto.CategoryCreateRequest;
import com.app.expensetracker.entity.Category;
import org.springframework.http.ResponseEntity;
import java.util.Optional;

public interface CategoryService {

    Category createCategory(CategoryCreateRequest categoryCreateRequest);
    ResponseEntity<Optional<Category>> getCategoryById(String category_id);
    Category updateCategory(String categoryId, CategoryCreateRequest categoryCreateRequest);
    ResponseEntity<Optional<Category>> deleteCategoryById(String category_id);
}

CategoryServiceImpl实现类

package com.app.expensetracker.service;
import com.app.expensetracker.dao.CategoryRepository;
import com.app.expensetracker.dto.CategoryCreateRequest;
import com.app.expensetracker.entity.Category;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

@Service
public class CategoryServiceImpl implements CategoryService{
@Autowired
private CategoryRepository categoryRepository;

    @Override
    @Transactional
    public Category createCategory(CategoryCreateRequest categoryCreateRequest){
        Category category = categoryCreateRequest.to();
        return categoryRepository.save(category);
    }
    
    
    @Override
    @Transactional
    public ResponseEntity<Optional<Category>> getCategoryById(String category_id){
    
        Optional<Category> category =  categoryRepository.findById(category_id);
        if(category == null){
            return ResponseEntity.notFound().build();
        }
        else{
            return ResponseEntity.ok(category);
        }
    
    }
    
    @Override
    @Transactional
    public Category updateCategory(String categoryId, CategoryCreateRequest categoryCreateRequest){
        Category category = categoryCreateRequest.to();
        return categoryRepository.save(category);
    }
    
    @Override
    @Transactional
    public ResponseEntity<Optional<Category>> deleteCategoryById(String category_id){
        Optional<Category> category =  categoryRepository.findById(category_id);
        if(category == null){
            return ResponseEntity.notFound().build();
        }
        else{
            categoryRepository.deleteById(category_id);
            return ResponseEntity.ok(category);
        }
    }

}

ExpenseTrackerApplication启动类

package com.app.expensetracker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication //(exclude = {DataSourceAutoConfiguration.class })
//@ComponentScan(basePackages = "com.app.*")
//@EntityScan("com.app.*")
@EnableJpaRepositories(basePackages = "com.app.expensetracker.repository")

public class ExpenseTrackerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ExpenseTrackerApplication.class, args);
    }

}

解决方案

问题根源在于启动类中@EnableJpaRepositories注解的包路径配置错误:你的CategoryRepository实际位于com.app.expensetracker.dao包下,但注解中指定的扫描路径是com.app.expensetracker.repository,导致Spring无法找到该Repository接口并创建对应的Bean。

有两种解决方式:

方式一:修正@EnableJpaRepositories的扫描路径

修改启动类中的注解,将basePackages改为Repository所在的包:

package com.app.expensetracker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.app.expensetracker.dao")
public class ExpenseTrackerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExpenseTrackerApplication.class, args);
    }

}

如果存在多个Repository包,可通过数组形式指定多个路径:
@EnableJpaRepositories(basePackages = {"com.app.expensetracker.dao", "com.app.expensetracker.other.repository"})

方式二:移除@EnableJpaRepositories注解

@SpringBootApplication注解默认会扫描主类所在包(com.app.expensetracker)及其所有子包下的Spring组件,包括Repository接口。由于你的CategoryRepository已经在com.app.expensetracker.dao(主类包的子包)下,直接删除@EnableJpaRepositories注解,Spring会自动识别并创建Repository Bean:

package com.app.expensetracker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ExpenseTrackerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExpenseTrackerApplication.class, args);
    }

}

内容的提问来源于stack exchange,提问作者Giribala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:35:04