我从 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.javapackage 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.javapackage 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@EnableTransactionManagementpublic class JpaConfig {}src/main/java/com/gretro/petclinic/vets/repositories/VetSpecialtiesRepository.javapackage com.gretro.petclinic.vets.repositories;import com.gretro.petclinic.vets.models.VetSpecialty;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;@Repositorypublic 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.
3 回答
MYYA
TA贡献1868条经验 获得超4个赞
指定要扫描的包
@EnableJpaRepositories(basePackages = "com.gretro.petclinic.vets.repositories")
用于启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。
红糖糍粑
TA贡献1815条经验 获得超6个赞
例如,启用 Spring Data JPA 的自动配置支持需要知道 JPA 存储库的路径。默认情况下,它将仅扫描主应用程序包及其子包以检测 JPA 存储库。因此,如果 JPA 存储库位于主应用程序包或其子包下,那么它将被检测到,作为@EnableAutoConfiguration
自动配置基于 spring 的配置的一部分。如果存储库类未放置在主应用程序包或其子包下,则应在主应用程序配置类中使用注释声明相关存储库包@EnableJpaRepositories
。然后,这将启用给定/声明的包中包含的 JPA 存储库。
用于启用 JPA 存储库的注释。默认情况下会扫描 Spring Data 存储库的带注释的配置类的包。
e.g. @EnableJpaRepositories(basePackages = "com.springbootdev.examples.jpa.repositories")
此描述将帮助您更多地了解此注释。
慕斯709654
TA贡献1840条经验 获得超5个赞
由于您使用的是 Spring Boot,因此不需要@Configuration
使用@EnableJpaRepositories
. Spring Boot 的自动配置可以完成这项工作。
您可以安全地删除此注释。
它将@EnableJpaRepositories
告诉 Spring Boot 您想要控制 Spring Data JPA 存储库配置。
如果是这种情况,您需要指定要为您的存储库扫描的包:
@EnableJpaRepositories(basePackages = {"com.gretro.petclinic.vets.repositories"})
添加回答
举报
0/150
提交
取消