繁体   English   中英

Spring Boot启用注释被忽略

[英]Spring boot Enable annotation ignored

我从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.

指定要扫描的包

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

启用JPA存储库的注释。 默认情况下,将扫描带注释的配置类的包中的Spring Data存储库。

https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/config/EnableJpaRepositories.html

@EnableJpaRepositories

例如,启用对Spring Data JPA的自动配置支持需要了解JPA存储库的路径。 默认情况下,它将仅扫描主应用程序包及其子包以检测JPA存储库。 因此,如果将JPA存储库放置在主应用程序包或其子包下,则@EnableAutoConfiguration会将其检测为自动配置基于Spring的配置的一部分。 如果存储库类未放置在主应用程序包或其子包下,则应在主应用程序配置类中使用@EnableJpaRepositories批注声明相关存储库包。 然后,这将启用给定/声明的包中包含的JPA存储库。

启用JPA存储库的注释。 默认情况下,将扫描带注释的配置类的包中的Spring Data存储库。

e.g.
    @EnableJpaRepositories(basePackages = "com.springbootdev.examples.jpa.repositories")

此描述将帮助您了解有关此注释的更多信息。

由于您使用的是Spring Boot,因此无需使用@EnableJpaRepositories标记任何@Configuration类。 Spring Boot的自动配置可以完成这项工作。

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

@EnableJpaRepositories会告诉Spring Boot您想控制Spring Data JPA Repositories配置。

如果是这种情况,则需要指定要扫描其存储库的软件包:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM