猿问

Spring boot启用注释被忽略

我从 Sprint Boot 5 开始,遇到了一些我不明白的问题。也许有人可以为我阐明这一点。


我将 Sprint Boot 2.1.7 与 Spring JPA 和 PostgreSQL 一起使用。我试图简单地启用 JpaRepositories 的发现。当@EnableJpaRepositories我的“主”类(带有注释的类@SprintBootApplication)上有 时,一切正常。但是,我想吸取良好的实践,因此我想在关注点之间拆分我的配置。因此,我创建了一个JpaConfig类来注册 Bean 并为我的应用程序启用 JPA 功能。然而,启用注释似乎被忽略了。


我尝试在此配置文件中注册一个虚拟 Bean,以确保组件扫描找到我的类,并且它可以正常工作。我在网上看到过在配置类上启用属性的示例。为什么它对我不起作用?我错过了什么吗?这是 Spring Boot 最新版本中禁用的功能吗?


我的代码如下所示:


src/main/java/com/gretro/petclinic/PetClinicApplication.java


package com.gretro.petclinic;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication()

public class PetClinicApplication {

    public static void main(String[] args) {

        SpringApplication.run(PetClinicApplication.class, args);

    }

}

src/main/java/com/gretro/petclinic/config/JpaConfig.java


package com.gretro.petclinic.config;


import org.springframework.context.annotation.Configuration;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import org.springframework.transaction.annotation.EnableTransactionManagement;


@Configuration

@EnableJpaRepositories

@EnableTransactionManagement

public class JpaConfig {

}

src/main/java/com/gretro/petclinic/vets/repositories/VetSpecialtiesRepository.java


package com.gretro.petclinic.vets.repositories;


import com.gretro.petclinic.vets.models.VetSpecialty;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.stereotype.Repository;


@Repository

public interface VetSpecialtiesRepository extends JpaRepository<VetSpecialty, Long> {

}

这是我在启动时遇到的错误:


***************************

APPLICATION FAILED TO START

***************************


Description:


Parameter 0 of constructor in com.gretro.petclinic.init.DataSeeder required a bean of type 'com.gretro.petclinic.vets.repositories.VetSpecialtiesRepository' that could not be found.



Action:


Consider defining a bean of type 'com.gretro.petclinic.vets.repositories.VetSpecialtiesRepository' in your configuration.


德玛西亚99
浏览 106回答 3
3回答

MYYA

指定要扫描的包@EnableJpaRepositories(basePackages = "com.gretro.petclinic.vets.repositories")用于启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。

红糖糍粑

例如,启用 Spring Data JPA 的自动配置支持需要知道 JPA 存储库的路径。默认情况下,它将仅扫描主应用程序包及其子包以检测 JPA 存储库。因此,如果 JPA 存储库位于主应用程序包或其子包下,那么它将被检测到,作为@EnableAutoConfiguration自动配置基于 spring 的配置的一部分。如果存储库类未放置在主应用程序包或其子包下,则应在主应用程序配置类中使用注释声明相关存储库包@EnableJpaRepositories。然后,这将启用给定/声明的包中包含的 JPA 存储库。用于启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。e.g.&nbsp; &nbsp;&nbsp;&nbsp;@EnableJpaRepositories(basePackages&nbsp;=&nbsp;"com.springbootdev.examples.jpa.repositories")此描述将帮助您更多地了解此注释。

慕斯709654

由于您使用的是 Spring Boot,因此不需要@Configuration使用@EnableJpaRepositories.&nbsp;Spring Boot 的自动配置可以完成这项工作。您可以安全地删除此注释。它将@EnableJpaRepositories告诉 Spring Boot 您想要控制 Spring Data JPA 存储库配置。如果是这种情况,您需要指定要为您的存储库扫描的包:@EnableJpaRepositories(basePackages&nbsp;=&nbsp;{"com.gretro.petclinic.vets.repositories"})
随时随地看视频慕课网APP

相关分类

Java
我要回答