为了账号安全,请及时绑定邮箱和手机立即绑定

Spring boot启用注释被忽略

Spring boot启用注释被忽略

德玛西亚99 2023-07-13 13:51:28
我从 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 存储库的带注释的配置类的包。


查看完整回答
反对 回复 2023-07-13
?
红糖糍粑

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")

此描述将帮助您更多地了解此注释。


查看完整回答
反对 回复 2023-07-13
?
慕斯709654

TA贡献1840条经验 获得超5个赞

由于您使用的是 Spring Boot,因此不需要@Configuration使用@EnableJpaRepositories. Spring Boot 的自动配置可以完成这项工作。

您可以安全地删除此注释。

它将@EnableJpaRepositories告诉 Spring Boot 您想要控制 Spring Data JPA 存储库配置。

如果是这种情况,您需要指定要为您的存储库扫描的包:

@EnableJpaRepositories(basePackages = {"com.gretro.petclinic.vets.repositories"})


查看完整回答
反对 回复 2023-07-13
  • 3 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信