Параметр 0 метода init в 'Application' требует bean-компонента типа 'package', который не может быть найден - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь соединить Morphia с Java и поэтому попытался реализовать проект. Но я получаю следующую ошибку

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method init in code.nithin.application.Application required a bean of type 'code.nithin.repository.AssetRepository' that could not be found.


Action:

Consider defining a bean of type 'code.nithin.repository.AssetRepository' in your configuration.


Process finished with exit code 1

Функция вызова

@Bean
public CommandLineRunner init(AssetRepository assetRepository){
    return (args) -> {
        Asset test = new Asset(1, "https://example.com");
        System.out.println(assetRepository.save(test).getId());
    };
}

AssetController

@Repository
public class AssetController implements AssetRepository{
    @Autowired
    private Datastore datastore;

    @Override
    public Key<Asset> save(Asset asset){
        return datastore.save(asset);
    }
}

и AssetRepository равно

public interface AssetRepository {
    public Key<Asset> save(Asset asset);
}

Asset класс

@Data
@Entity("asset")
@NoArgsConstructor
public class Asset {

    @Id
    private ObjectId id;
    private String URL;
    private long timeStamp;
    private int version;

    public Asset(int version, String URL) {
        this.version = version;
        this.URL = URL;
        this.timeStamp = System.currentTimeMillis();
    }

    public ObjectId getId() {
        return id;
    }

    public String getURL() {
        return URL;
    }

    public long getTimeStamp() {
        return timeStamp;
    }

    public int getVersion() {
        return version;
    }

}

Добавлен весь Application класс

package code.nithin.application;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
import org.springframework.context.annotation.Bean;

import code.nithin.entity.Asset;


import code.nithin.repository.AssetRepository;


@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
public class Application {

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

    @Bean
    public CommandLineRunner init(AssetRepository assetRepository){
        return (args) -> {
            Asset test = new Asset(1, "https://example.com");
            System.out.println(assetRepository.save(test).getId());
        };
    }
}

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку ваш репозиторий не находится в иерархии пакетов Application, рассмотрите возможность добавления инструкции сканирования компонента, например:

@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
@ComponentScan({"code.nithin.repository"})
public class Application {

Вы также можете указать несколько пакетов или просто отсканировать "code.nithin", если хотите сканировать дерево пакетов всего приложения.

...