[英]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存儲庫。
@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.