Не удается разрешить ссылку на bean-компонент mongoTemplate при установке свойства bean-компонента mongoOperations при развертывании AWS Lambda - PullRequest
1 голос
/ 15 марта 2020

У меня есть проект весенней функции облака для запуска кода в AWS Lambda. Приложение весенней загрузки отлично работает локально. Но выдает приведенную ниже ошибку при развертывании в AWS Lambda.

Ошибка: -

{
  "errorMessage": "Error creating bean with name 'associationService' defined in file [/var/task/org/qmetech/service/AssociationService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' available",
  "errorType": "org.springframework.beans.factory.UnsatisfiedDependencyException",
  "stackTrace": [

В проекте есть root проект с подпроектом ' GetAssociationService '

rootproject - build.gradle

plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'com.github.johnrengelman.shadow' version '5.2.0'
}

bootJar { enabled = false }

jar { enabled = true }

subprojects {
    group = 'org.qmetech'
    version = '1.0.0'
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'com.github.johnrengelman.shadow'
    apply plugin: 'java'
}

repositories { mavenCentral ( ) }

ext { set ( 'springCloudVersion' , "Hoxton.SR3" ) }

dependencies {
    testImplementation ( 'org.springframework.boot:spring-boot-starter-test' ) {
        exclude group: 'org.junit.vintage' , module: 'junit-vintage-engine'
    }
}

ext.libraries = [
        commonlibraries: ['org.springframework.boot:spring-boot-starter:2.2.5.RELEASE' ,
                          'org.springframework.cloud:spring-cloud-function-context' ,
                          'org.springframework.cloud:spring-cloud-function-adapter-aws:2.0.1.RELEASE' ,
                          'com.amazonaws:aws-lambda-java-log4j:1.0.0' ,
                          'org.springframework.boot:spring-boot-starter-web:2.2.5.RELEASE' ,
                          'org.springframework.cloud:spring-cloud-starter-function-web:1.0.0.RELEASE' ,
                          'org.springframework.boot.experimental:spring-boot-thin-layout:1.0.11.RELEASE' ,
                          'org.springframework.cloud:spring-cloud-starter-function-web:1.0.0.RELEASE' ,
                          'org.springframework.data:spring-data-mongodb:2.2.5.RELEASE'
        ] ,
]

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

test { useJUnitPlatform ( ) }

ChildProject - build.gradle

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

springBoot {
    mainClassName = 'org.qmetech.GetAssociationService'
}

dependencies {
    dependencies {
        compile libraries.commonlibraries
        implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
    }
}

UserRepository. java

package org.qmetech.repository;

import org.qmetech.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends MongoRepository<User, Integer> { }

AssociationService. java

package org.qmetech.service;

import org.qmetech.domain.User;
import org.qmetech.repository.UserRepository;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.function.Function;

@Component
public class AssociationService implements Function<String, List<User>> {

    private final UserRepository userRepository;

    public AssociationService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public List<User> apply(String uppercaseRequest) {
        List<User> users = userRepository.findAll();
        return users;
    }
}

Полный код можно найти здесь - https://github.com/iftekharkhan09/Services

Может кто-нибудь сказать, пожалуйста, что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 15 марта 2020

Вам необходимо создать bean-компоненты MongoTemplate, так как по умолчанию конфигурация отсутствует,

@Bean
public MongoClient mongoClient() {
    return new MongoClient("localhost", 27017);
}

@Bean
public MongoTemplate mongoTemplate(MongoClient mongoClient) throws Exception {
    return new MongoTemplate(mongoClient, "databaseName");
}

Кроме того, не забудьте использовать com.mongodb.client.MongoClient, который заменяет предопределенный com.mongodb.MongoClient с Spring Boot 2.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...