2

в проекте весенней загрузки У меня есть проблемы, чтобы исключить некоторые репозитории из сканирования компонентов.Как исключить @Repository из проверки компонентов при использовании Spring Data Rest

У меня есть библиотека, которая содержит некоторые объекты и некоторые репозитории (JpaRepositories). По какой-то причине я применил небольшое приложение Spring Boot Data Rest, которое должно использоваться для предоставления тестерам быстрого доступа к объектам. Поэтому я реализовал репозиторий, который расширяет PagingAndSortingRepository и аннотируется с помощью @RepositoryRestResource.

Когда приложение запустится, весь репозиторий будет отсканирован и сделан доступным. До тех пор, пока я хочу, чтобы хранилища Data Rest были доступны, я аннотировал компонентный сканер, чтобы исключить нежелательные репозитории. Но это не работает. Я проверил с конечной точкой исполнительных компонентов, и что бы я ни делал - никаких репозиториев не исключено.

Чтобы продемонстрировать проблему, я создал простую демонстрационную заявку: https://github.com/magomi/springboot-restdata-repoloading.

Чтобы исключить DataRepository я попробовал два подхода:

// exclude V02 
@SpringBootApplication 
@ComponentScan(excludeFilters = { 
     @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { 
       DataRepository.class}) 
}) 

и

// exclude V01 
@SpringBootApplication(exclude = { DataRepository.class }) 

без успеха. Когда я называю/фасоль конечной точки (при условии, с помощью пружины загрузочного привода) Я всегда вижу

{ 
    bean: "dataRepository", 
    aliases: [ ], 
    scope: "singleton", 
    type: "org.codefromhell.test.repoloading.DataRepository", 
    ... 
}, 
{ 
    bean: "dataApiRepository", 
    aliases: [ ], 
    scope: "singleton", 
    type: "org.codefromhell.test.repoloading.api.DataApiRepository", 
    ... 
}, 

ответ

4

Поскольку это хранилище и не строго @Component, вы должны исключили его путем добавления @EnableJpaRepositories к приложению:

@SpringBootApplication 
@EnableJpaRepositories(excludeFilters = { 
     @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { 
       DataRepository.class}) 
}) 
public class ApiApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(ApiApplication.class, args); 
    } 
} 
+0

спасибо! – magomi

0

Вы можете использовать аннотацию org.springframework.data.repository.NoRepositoryBean через интерфейс вашего репозитория. Из док:

Аннотация исключить интерфейсы хранилища, захватываемых и, таким образом, в результате получая экземпляр создается. Обычно это используется при предоставлении расширенного базового интерфейса для всех репозиториев в сочетании с базовым классом пользовательского репозитория для реализации методов, объявленных в этом промежуточном интерфейсе. В этом случае вы обычно извлекаете свои конкретные интерфейсы репозитория из промежуточного, но не хотите создавать компонент Spring для промежуточного интерфейса.