簡體   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