2016-10-18 1 views
1

я получаю исключение, когда я начинаю мое заявление, где весна придраться UnsatisfiedDependencyException:Spring JPA не реализует/автоматического связывания хранилищу, несмотря на @EnableJpaRepositories аннотацию

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationConfig': Unsatisfied dependency expressed through field 'controlRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.oak.api.finance.repository.ControlRepository]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 

Мое приложение организовано в следующем формате:

  1. я объявил мой репозиторий интерфейсов, с соответствующими аннотациями JPA Spring:

    @RepositoryRestResource(collectionResourceRel = "exchange", path = "exchanges") 
    public interface ControlRepository extends PagingAndSortingRepository<Control, Long> { 
    } 
    
  2. Я аннотированный EntryPoint класс, который содержит метод main

    @SpringBootApplication 
    @EntityScan(basePackages = {"com.oak.api.finance.model.dto"}) 
    @EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"}) 
    public class EntryPoint { 
        public static void main(String[] args) { 
         Logger logger = LogManager.getLogger(EntryPoint.class); 
         logger.info("Starting application"); 
    
         ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class); 
    //  SpringApplication.run(EntryPoint.class, args); 
    
         ctx.getBean(ApplicationServer.class).start(); 
        } 
    
  3. Я использовал @Autowired вводить свой репозиторий в моей пружинной конфигурации (Java на основе) ApplicationConfig класс:

    @Autowired 
    private ControlRepository controlRepository; 
    @Autowired 
    private CompanyRepository companyRepository; 
    @Autowired 
    private SectorRepository sectorRepository; 
    

По существу Я хочу контролировать зависимость от Spring и ограничивать ее несколькими пакетами (репозитории, конфигурацию java и программу ent точка чень - EntryPoint)

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

ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class) 

экземпляры репозиториев будут присутствовать в Пуле фасоли и можно было бы autowire их в мой ApplicationConfig контекст, а затем вводить их в мой контроллер.

Это явно не происходит, и Весна жалуется на отсутствие пропавшего Bean для автоустройства, но я не уверен, что мне не хватает.

Ниже снимок моих пакетов: enter image description here любые идеи?

+0

В каком пакете находится класс Control. Вы настроили функцию сканирования объектов.что мне кажется странным. –

+0

Класс Control, а также остальные классы Entity находятся в: com.oak.api.finance.model.dto, dto - это место, где я помещаю все мои классы Entity. – Charbel

+0

Добавить SpringApplication.run (EntryPoint.class); после регистрации и удаления части ApplicationContext. Затем убедитесь, что ваш класс ApplicationConfig аннотируется с @Configuration –

ответ

1

Мое предположение заключается в том, что ваши репозитории не проверяются, поэтому в результате бобы не создаются. Вы можете попробовать удалить эти 2 аннотаций

@EntityScan(basePackages = {"com.oak.api.finance.model.dto"}) 
@EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"}) 

И держать только @SpringBootApplication. Если это не работает, вам может понадобиться, чтобы проверить структуру пакета (если это возможно вставить скриншот здесь)

Edit 1

заменить @SpringBootApplication с

@Configuration 
@EnableAutoConfiguration 
@ComponentScan("com.oak") 

Edit2

Используйте

new SpringApplicationBuilder() 
     .sources(SpringBootApp.class) 
     .web(false) 
     .run(args); 

Или используйте CommandLineRunner после смены ComponentSc путь к «com.oak», как предположил mh-dev

+0

К сожалению, это не устранило проблему. Я пытаюсь положить все в github, если это окажется сложным, я попробую сделать снимок экрана. (Я думал, что это уже на github, но похоже, что я создал локальную ветку - не знаю, как это сделать на github, я посмотрю) – Charbel

+0

OK Я не смог разобрать github сейчас, я добавил скриншот – Charbel

+1

I подумайте, что это проблема. http://stackoverflow.com/questions/33619532/configuration-using-annotation-springbootapplication –