Параметр 0 конструктора в [] требовал bean-компонента типа [], который не может быть найден - PullRequest
0 голосов
/ 14 апреля 2020

Ошибка : для параметра 0 конструктора в com.tw.api.service.impl.BookServiceImpl требуется компонент типа 'com.tw.api.repository.BookRepository', который не может быть найден.

Исключение : Обнаружено исключение во время инициализации контекста - отмена refre sh попытка: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем 'bookController', определенным в файле [/ Users /rashdul.ehasan/Projects/boot-camp/api/target/classes/com/tw/api/controller/BookController.class]: неудовлетворительная зависимость выражается через параметр конструктора 0; вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем bookServiceImpl, определенным в файле [/Users/rashdul.ehasan/Projects/boot-camp/api/target/classes/com/tw/api/ service / impl / BookServiceImpl.class]: неудовлетворенная зависимость, выраженная через параметр конструктора 0; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.tw.api.repository.BookRepository: ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей

Есть идеи, как это исправить?

Я исключил автоматическую конфигурацию по умолчанию ...

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class,
        MongoAutoConfiguration.class,
        MongoDataAutoConfiguration.class})
public class ApiApplication {

Я написал класс bean-компонентов фабрики для mon go но, похоже, туда не добраться.

@Configuration
@ConditionalOnProperty(prefix = "spring", name = "db.dialect", havingValue = "mongo", matchIfMissing = true)
@EnableMongoRepositories(
        repositoryFactoryBeanClass = ApiMongoRepositoryFactoryBean.class,
        basePackages = "com.tw.api.repository")
public class ApiMongoRepositoryConfig {

    @Value("${spring.data.mongodb.uri}")
    private String uri;

    private static final Logger LOGGER = LoggerFactory.getLogger(ApiMongoRepositoryConfig.class);

    public ApiMongoRepositoryConfig() {
        LOGGER.info("Repository Configuration: " + ApiMongoRepositoryConfig.class);
    }

    @Bean
    public MongoClient mongoClient() {
        return new MongoClient(new MongoClientURI(uri));
    }
}

Пакеты:

BookController: package com.tw.api.controller;
BookService: package com.tw.api.service;
BookServiceImpl: package com.tw.api.service.impl;
BookRepository: package com.tw.api.repository;

ApiMongoRepository: package com.tw.api.repository.base;
ApiMongoRepositoryConfig: package com.tw.api.config;
ApiMongoRepositoryFactoryBean: package com.tw.api.helper;

ApiApplication: package com.tw.api;

Вот ссылка на базу кода, https://github.com/er310/boot-camp/tree/master/api

1 Ответ

0 голосов
/ 14 апреля 2020

Ваш класс Book помечен как объект JPA:

import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "book")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Book extends AbstractEntity {

Но вы создаете только репозитории Mong с @EnableMongoRepositories.

Вам нужно принять решение если вы хотите использовать MongoDb с Spring Data Mon go или реляционную базу данных с JPA + Spring Data JPA.

...