当前位置: 首页 > 知识库问答 >
问题:

Spring Boot启动失败--在配置中定义类型为“TopicRepository”的bean

景宏朗
2023-03-14

我一直在学习Spring Boot的JavaBrains教程。

我的项目结构如下:

courseapiapp.java:

@SpringBootApplication
@ComponentScan(basePackages = {
    "com.bloodynacho.rishab.topics"
})
@EntityScan("com.bloodynacho.rishab.topics")
public class CourseApiApp {

    public static void main(String[] args) {
        SpringApplication.run(CourseApiApp.class, args);
    }
}
@RestController
public class TopicController {

    @Autowired
    private TopicService topicService;

    @RequestMapping(
        value = "/topics"
    )
    public List<Topic> getAllTopcs() {
        return topicService.getAllTopics();
    }
}
@Service
public class TopicService {

    @Autowired
    private TopicRepository topicRepository;

    public List<Topic> getAllTopics() {
        List<Topic> topics = new ArrayList<>();
        this.topicRepository
            .findAll()
            .forEach(topics::add);
        return topics;
    }
}

topic.java:

@Entity
public class Topic {
    @Id
    private String id;
    private String name;
    private String description;
}

topicrepository.java:

@Repository
public interface TopicRepository extends CrudRepository<Topic, String>{
}

pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.derby</groupId>
        <artifactId>derby</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
***************************
APPLICATION FAILED TO START
***************************

Description:
Field topicRepository in com.bloodynacho.rishab.topics.TopicService required a bean of type 'com.bloodynacho.rishab.topics.TopicRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.bloodynacho.rishab.topics.TopicRepository' in your configuration.
Process finished with exit code 1

编辑:我读了这篇文章,解释了即使没有实际实现@Autowired接口是如何工作的。我明白解决办法,但我不明白如何解决我的问题。显然,Spring数据的设置和配置方式存在一些问题(如答案中所述)

共有1个答案

端木夕
2023-03-14

因为如果您的其他包层次结构在您的主应用程序下面,带有@springbootapplication注释,那么您将被隐式组件扫描覆盖。

因此,一个简单的解决方案可以通过以下两个步骤完成:

  1. 将main类的包重命名为com.bloodynacho.rishab.
    (这是我建议main app的完整包名应该是其他包的根。)
  2. 删除@componentscan@entityscan注释。
    (尽管@componentscan@entityscan不同,但根据我的经验,也可以删除。)
 类似资料:
  • 我正在学习Spring Boot的JavaBrains教程。 我的项目结构如下: courseapiapp.java: topicService.java: topic.java: topicRepository.java: 编辑:我读到的这篇文章解释了@AutoWired在没有实际实现接口的情况下是如何工作的。我明白解决办法,但我不明白如何解决我的问题。显然,设置和配置Spring数据的方式存在

  • 更新: 我发现我将类A注入到扩展外部类的类C中,该类不受spring管理,如下所示: 这应该是交易失败的主要原因。 另一个问题:有没有办法让spring管理类A的事务,该类已经注入到非spring处理的anothor类中? 我正在用Spring Boot和Mybatis建立一个项目。 我有一个问题,其中一个服务类无法创建事务连接,也不会执行回滚。 我发现,如果我去掉B类中A类的注入,就像这样: 类

  • 应用程序启动失败 考虑在您的配置中定义一个类型为'com.service.adminService'的bean。

  • 当我尝试打开下面的URL时,我确实看到了我的JSON响应。 http://localhost:8080/v3/api-docs

  • 我的spring boot项目不需要datasource配置,但当我运行它时,出现了错误: 申请启动失败 描述:配置数据源失败:未指定“url”属性,无法配置嵌入式数据源。 原因:无法确定合适的驱动程序类别 行动: 考虑以下内容:如果您想要一个嵌入式数据库(H2、HSQL或Derby),请将其放在类路径上。如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有活动的配置文件) 我的a