Spring CLI [v2.2.3.RELEASE] с MongoRepository: org.springframework.beans.factory.UnsatisfiedDependencyException - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь написать простое приложение MongoDB с весенним кликом. Я использовал эту пружину с учебником mongodb в качестве базы, и я получаю ошибку UnsatisfiedDependencyException.

Вот мой код

file: Grabs.groovy

@Grab('spring-boot-starter-data-mongodb')

class Grabs {}

file: CustomerOrder.groovy

import org.springframework.data.annotation.Id

class CustomerOrder {
    @Id
    String id
    Date orderDate
}

file: MongoOrderRepository.groovy

import org.springframework.data.mongodb.repository.MongoRepository

interface MongoOrderRepository extends MongoRepository<CustomerOrder, String> {
    CustomerOrder findById(String customerId)
}

file: OrderController.groovy

@RestController
class OrderController {

    @Autowired
    MongoOrderRepository orderRepository

    @GetMapping("/{order}")
    def listOrders(@PathVariable("order") String order) {
        List<CustomerOrder> orders = orderRepository.findById(order)
        return orders
    }
}

, когда я делаю spring run *, вот ошибки

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

Description:

Field orderRepository in OrderController required a bean of type 'MongoOrderRepository' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'MongoOrderRepository' in your configuration.

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.cli.app.SpringApplicationLauncher.launch(SpringApplicationLauncher.java:68)
    at org.springframework.boot.cli.command.run.SpringApplicationRunner$RunThread.run(SpringApplicationRunner.java:168)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderController': Unsatisfied dependency expressed through field 'orderRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'MongoOrderRepository' available: 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:643)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    ... 6 more

Я попытался вставить @Repository в мой MongoOrderRepository, так как это работало для реализации на основе Jdb c, но не работало. Я не уверен, как поступить. Любая помощь будет оценена.

Спасибо

1 Ответ

0 голосов
/ 02 мая 2020

Пример выполнения: https://github.com/thiagochagas/groovy-mongodb

1) Настраивается в вашем коде:

Захваты:

@Grab(group='org.springframework.boot', module='spring-boot-starter-data-mongodb', version='2.2.3.RELEASE')

MongoOrderRepository (необязательная настройка) :

interface MongoOrderRepository extends MongoRepository<CustomerOrder, String> {
    Optional<CustomerOrder> findById(String customerId)
}

OrderController (список для необязательного):

@GetMapping("/{order}")
def listOrders(@PathVariable("order") String order) {
    Optional<CustomerOrder> orders = orderRepository.findById(order)
    return orders
}

2) Установить и запустить код:

./gradlew clean build
./gradlew bootRun

Доступ к localhost: 8080 / {orderId} : enter image description here

...