【问题标题】:Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations设置 bean 属性“mongoOperations”时无法解析对 bean“mongoTemplate”的引用
【发布时间】:2021-05-14 21:57:34
【问题描述】:

我正在尝试使用 MongoDB 创建一个 Spring Boot CRUD 应用程序。但我无法将它连接到 MongoDB Atlas。当我运行程序时,会显示以下异常。我正在尝试使用 Mongo Atlas 中生成的连接 URL 将我的应用程序连接到 MongDB Atlas 集群

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeController': Unsatisfied dependency expressed through field 'employeeRepo'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepo' defined in com.example.mongo.repo.EmployeeRepo defined in @EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mongoTemplate' defined in class path resource [org/springframework/boot/autoconfigure/data/mongo/MongoDatabaseFactoryDependentConfiguration.class]: Unsatisfied dependency expressed through method 'mongoTemplate' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mongoDatabaseFactory' defined in class path resource [org/springframework/boot/autoconfigure/data/mongo/MongoDatabaseFactoryConfiguration.class]: Unsatisfied dependency expressed through method 'mongoDatabaseFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongo' defined in class path resource [org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mongodb.client.MongoClient]: Factory method 'mongo' threw exception; nested exception is java.lang.IllegalArgumentException: The connection string contains invalid user information. If the username or password contains a colon (:) or an at-sign (@) then it must be urlencoded
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.3.jar:5.3.3]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.3.jar:5.3.3]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.3.jar:5.3.3]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.2.jar:2.4.2]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.2.jar:2.4.2]
    at com.example.mongo.MongoApplication.main(MongoApplication.java:11) ~[classes/:an]

我的应用程序类:

@SpringBootApplication
public class MongoApplication {

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

}

控制器类:

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeRepo employeeRepo;

    @Autowired
    private SequenceGeneratorService sequenceGeneratorService;

    @GetMapping("/employees")
    public List<Employee> getAllEmployees(){
        return employeeRepo.findAll();
    }

    @GetMapping("/employees/{id}")
    public Employee getEmployee(@PathVariable long id){
        Employee employee = employeeRepo.findById(id).get();
        return employee;
    }

    @PostMapping("/employees")
    public Employee addEmployee(@RequestBody Employee employee){
        employee.setId(sequenceGeneratorService.generateSequence(Employee.SEQUENCE_NAME));
        return employeeRepo.save(employee);
    }
}

存储库:

public interface EmployeeRepo extends MongoRepository<Employee, Long> {
}

模型类:

@Document(collation = "Employee")                                                                            
public class Employee {                                                                                      
                                                                                                             
    @Transient                                                                                               
    public static final String SEQUENCE_NAME = "users_sequence";                                             
                                                                                                             
    @Id                                                                                                      
    private long id;                                                                                         
                                                                                                             
    @Indexed(unique = true)                                                                                  
    private String firstName;                                                                                
    private String lastName;                                                                                 
                                                                                                             
    @Indexed(unique = true)                                                                                  
    private String email;                                                                                    
                                                                                                             
    public Employee() {                                                                                      
    }                                                                                                        
                                                                                                             
    public Employee(long id, String firstName, String lastName, String email) {                              
        this.id = id;                                                                                        
        this.firstName = firstName;                                                                          
        this.lastName = lastName;                                                                            
        this.email = email;                                                                                  
    }                                                                                                        
                                                                                                             
    public Employee(String firstName, String lastName, String email) {                                       
        this.firstName = firstName;                                                                          
        this.lastName = lastName;                                                                            
        this.email = email;                                                                                  
    }                                                                                                        
            
    /** Getters and setters **/
    
}

应用程序属性:

spring.data.mongodb.uri=mongodb+srv://root:Luxan@22@testcluster.4ebwy.mongodb.net/EmployeeDB?retryWrites=true&w=majority
                                                                                             

【问题讨论】:

    标签: java mongodb spring-boot spring-mongodb


    【解决方案1】:

    连接字符串包含无效的用户信息。如果用户名或密码包含冒号 (:) 或 at 符号 (@),则必须进行 urlencoded

    在您的 mongo connect uri 中,密码“Luxan@22”包含一个“@”字符,应进行 urlencoded。所以你可以像'Luxan%4022'这样写

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 2021-03-10
      • 2017-08-17
      • 2016-08-19
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多