java - Spring boot启用注释被忽略

标签 java spring spring-boot spring-data-jpa

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

我正在将 Sprint Boot 2.1.7 与 Spring JPA 和 PostgreSQL 结合使用。我试图简单地启用 JpaRepositories 的发现。当我的“主”类(带有 @SprintBootApplication 注释的类)上有 @EnableJpaRepositories 时,一切正常。但是,我想吸取良好的实践,因此我想在关注点之间拆分我的配置。因此,我创建了一个 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")

Annotation to enable JPA repositories. Will scan the package of the annotated configuration class for Spring Data repositories by default.

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

关于java - Spring boot启用注释被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814572/

相关文章:

java - Guice 链接绑定(bind)与@Provides 方法

java - Spring Boot 中使用 Jpa 动态表名

java - 使用 DeferredResult 时输入流关闭

java - Spring Batch - 分块和多线程步骤 - RowMapper 中的 Nullpointer 异常

java - 如何在 Spring boot AsyncConfigurer 中使用优先级队列

java - Java 是抢占式的吗?

java - 是否存在与自身不可比的 Comparable?

mongodb - 如何在不使用GridFSTemplate的情况下在spring boot应用程序中上传和检索mongodb中的文件?

java - Struts2 通配符映射 - 更具体的一个由通用的一个处理

spring - 在Grails中模拟帖子-Spring身份验证