当前位置: 首页 > 知识库问答 >
问题:

如何修复MongoDB应用程序在Spring启动中的未满足依赖异常?

相野
2023-03-14

我正在尝试将我的Spring启动应用程序数据库从H2更改为MongoDB。我更新了application.properties文件并删除了任何“@Entity”和“@Colzo”,而是添加了“@Document”。我得到的错误是:

说明:

smartspace.dao.rdb中构造函数的参数0。RdbActionDao需要一个名为“mongoTemplate”的bean,但找不到该bean。

行动:

考虑在您的配置中定义一个名为“mongoTemboard”的bean。

完整控制台日志:

2019-05-13 12:48:55.477  INFO 15596 --- [           main] smartspace.Application                   : Starting Application on LAPTOP-E00E1JFN with PID 15596 (D:\git\2019b.giron.aptik.smartspace\bin started by Lael in D:\git\2019b.giron.aptik.smartspace)
2019-05-13 12:48:55.480  INFO 15596 --- [           main] smartspace.Application                   : The following profiles are active: production,default
2019-05-13 12:48:56.313  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2019-05-13 12:48:56.316  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-05-13 12:48:56.354  INFO 15596 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.ActionCrud.
2019-05-13 12:48:56.356  INFO 15596 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.ElementCrud.
2019-05-13 12:48:56.475  INFO 15596 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.UserCrud.
2019-05-13 12:48:56.503  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 180ms. Found 1 repository interfaces.
2019-05-13 12:48:56.517  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2019-05-13 12:48:56.518  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-05-13 12:48:56.533  INFO 15596 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data MongoDB - Could not safely identify store assignment for repository candidate interface smartspace.dao.rdb.GenericIdGeneratorCrud.
2019-05-13 12:48:56.542  INFO 15596 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23ms. Found 3 repository interfaces.
2019-05-13 12:48:56.947  INFO 15596 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2019-05-13 12:48:56.952  INFO 15596 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
2019-05-13 12:48:56.956  INFO 15596 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2019-05-13 12:48:57.078  INFO 15596 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$14f03da7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.093  INFO 15596 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$94708ad9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.104  INFO 15596 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration$$EnhancerBySpringCGLIB$$7fe1f8d6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.117  INFO 15596 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationDisposableAutoCreatedBeans' of type [org.springframework.integration.config.annotation.Disposables] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-13 12:48:57.721  INFO 15596 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8089 (http)
2019-05-13 12:48:57.746  INFO 15596 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-05-13 12:48:57.746  INFO 15596 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.16]
2019-05-13 12:48:57.757  INFO 15596 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\integrationcourse\jdk8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\WINDOWS\System32\OpenSSH\;C:\Users\Lael\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Python27\python.exe;;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%SYSTEMROOT%\System32\OpenSSH\;C:\Users\Lael\AppData\Local\Microsoft\WindowsApps;C:\Users\Lael\AppData\Roaming\npm;C:\Program Files\MongoDB\Server\4.0\bin;;C:\Program Files\JetBrains\WebStorm 2018.3.1\bin;;C:\Program Files\heroku\bin;.]
2019-05-13 12:48:57.855  INFO 15596 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-05-13 12:48:57.856  INFO 15596 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2335 ms
2019-05-13 12:48:58.157  INFO 15596 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-05-13 12:48:58.265  INFO 15596 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-05-13 12:48:58.332  INFO 15596 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2019-05-13 12:48:58.388  INFO 15596 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}
2019-05-13 12:48:58.389  INFO 15596 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-05-13 12:48:58.506  INFO 15596 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-05-13 12:48:58.645  INFO 15596 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
Hibernate: 

    drop table generic_id_generator if exists
Hibernate: 

    drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: 

    create table generic_id_generator (
       id bigint not null,
        primary key (id)
    )
2019-05-13 12:48:59.321  INFO 15596 --- [           main] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@1d6713dd'
2019-05-13 12:48:59.323  INFO 15596 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-05-13 12:48:59.356  WARN 15596 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rdbActionDao' defined in file [D:\git\2019b.giron.aptik.smartspace\bin\smartspace\dao\rdb\RdbActionDao.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'actionCrud': Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' available
2019-05-13 12:48:59.356  INFO 15596 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-05-13 12:48:59.356  INFO 15596 --- [           main] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
Hibernate: 

    drop table generic_id_generator if exists
Hibernate: 

    drop sequence if exists hibernate_sequence
2019-05-13 12:48:59.363  INFO 15596 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-05-13 12:48:59.365  INFO 15596 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2019-05-13 12:48:59.368  INFO 15596 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-05-13 12:48:59.378  INFO 15596 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-05-13 12:48:59.422 ERROR 15596 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Parameter 0 of constructor in smartspace.dao.rdb.RdbActionDao required a bean named 'mongoTemplate' that could not be found.


Action:

Consider defining a bean named 'mongoTemplate' in your configuration.

这是我的smartspace.dao.rdb.RdbActionDao:

package smartspace.dao.rdb;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import smartspace.dao.EnhancedActionDao;
import smartspace.data.ActionEntity;

@Repository
public class RdbActionDao implements EnhancedActionDao{
    private ActionCrud actionCrud;
    private GenericIdGeneratorCrud genericIdGeneratorCrud;
    @Value("${smartspace.name}")
    private String ourSmartspaceName;
    @Autowired  
    public RdbActionDao(
            ActionCrud actionCrud,
            GenericIdGeneratorCrud genericIdGeneratorCrud) {
        super();
        this.actionCrud = actionCrud;
        this.genericIdGeneratorCrud = genericIdGeneratorCrud;
    }

    @Override
    @Transactional
    public ActionEntity create(ActionEntity actionEntity) {
        // SQL: INSERT INTO ACTION (ID, NAME) VALUES (?,?);

        GenericIdGenerator nextId = 
            this.genericIdGeneratorCrud.save(new GenericIdGenerator());
        if(actionEntity.getActionSmartspace() == null) {
            actionEntity.setKey(Long.toString(nextId.getId()) +"#"+ ourSmartspaceName);
            this.genericIdGeneratorCrud.delete(nextId);
        }
        if (!this.actionCrud.existsById(actionEntity.getKey())) {
            ActionEntity rv = this.actionCrud.save(actionEntity);
            return rv;
        }else {
            throw new RuntimeException("Action already exists with key: " + actionEntity.getKey());
        }
    }


    @Override
    @Transactional(readOnly=true)
    public List<ActionEntity> readAll() {
        List<ActionEntity> rv = new ArrayList<>();
        // SQL: SELECT
        this.actionCrud.findAll()
            .forEach(rv::add);

        return rv;
    }

    @Override
    @Transactional
    public void deleteAll() {
        // SQL: DELETE
        this.actionCrud.deleteAll();
    }

    @Override
    @Transactional(readOnly=true)
    public List<ActionEntity> readAll(int size, int page) {
        return this.actionCrud
            .findAll(PageRequest.of(page, size))
            .getContent();
    }


    @Override
    @Transactional(readOnly=true)
    public List<ActionEntity> readActionWithElementIdContaining( 
            String elementId,
            int size, 
            int page) {

        return this.actionCrud
                .findAllByElementId(
                        elementId,
                        PageRequest.of(page, size));
    }

    @Override
    @Transactional(readOnly=true)
    public List<ActionEntity> readActionAvaiable(
            Date fromDate, 
            Date toDate, 
            int size, int page) {
        return this.actionCrud
                .findAllByCreationTimestampBetween(
                        fromDate, toDate,
                        PageRequest.of(page, size));
    }

    @Override
    public List<ActionEntity> readAll(String sortBy, int size, int page) {
        return this.actionCrud
            .findAll(PageRequest.of(
                    page, size, 
                    Direction.ASC, sortBy))
            .getContent();
    }

    @Override
    @Transactional(readOnly=true)
    public Optional<ActionEntity> readById(String actionKey) {
        return this.actionCrud.findById(actionKey);
    }
}

这是我的EnhancedActionDao:

package smartspace.dao;

import java.util.Date;
import java.util.List;
import java.util.Optional;

import smartspace.data.ActionEntity;

public interface EnhancedActionDao extends ActionDao{
    public List<ActionEntity> readAll(int size, int page);
    public List<ActionEntity> readAll(String sortBy, int size, int page);
    public List<ActionEntity> readActionWithElementIdContaining (String text, int size, int page);
    public List<ActionEntity> readActionAvaiable (
            Date fromDate, Date toDate,
            int size, int page);
    Optional<ActionEntity> readById(String actionKey);

}

这是我的行动道:

package smartspace.dao;

import smartspace.data.ActionEntity;

public interface ActionDao {

    public ActionEntity create(ActionEntity actionEntity);
    public java.util.List<ActionEntity> readAll();  
    public void deleteAll();
}

这是我的Application.java:

package smartspace;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


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

    }
}

这是我的application.properties:

smartspace.name =2019B.giron.aptik.smartspace


name.for.user.generator=World


spring.profiles.active=production,default

spring.jpa.hibernate.ddl-auto=create-drop

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE


server.port = 8089


spring.data.mongodb.uri=mongodb://laelav:laelav1@integrationcourse-shard-00-00-7bsmm.mongodb.net:27017,integrationcourse-shard-00-01-7bsmm.mongodb.net:27017,integrationcourse-shard-00-02-7bsmm.mongodb.net:27017/test?ssl=true&replicaSet=integrationcourse-shard-0&authSource=admin&retryWrites=true
spring.data.mongodb.host=integrationcourse-shard-00-01-7bsmm.mongodb.net
spring.data.mongodb.repositories.enabled=true
spring.data.mongodb.port=27017
spring.data.mongodb.database=course
spring.data.mongodb.username=laelav
spring.data.mongodb.password=laelav1

提前感谢您的帮助!

EDIT:
After adding the MongoTemplate Bean I have a new error:

>Description:

>The dependencies of some of the beans in the application context form a cycle:

>???????
>|  rdbActionDao defined in file [D:\git\2019b.giron.aptik.smartspace\bin\smartspace\dao\rdb\RdbActionDao.class]
>?     ?
>|  actionCrud
>???????

共有2个答案

王子明
2023-03-14

这个问题是通过导入正确的库并通过spring.data.使用ID注释来解决的...而不是从javax. one。

姬高澹
2023-03-14

我认为mongoTemplate存在依赖性问题。请在dao中添加此代码。

    @Bean public MongoTemplate mongoTemplate() throws Exception 
{ 
      return new MongoTemplate(mongo(), "database_name");
}

因此,这可能会有所帮助,mongo()是您的mongo客户机。

 类似资料:
  • 我有一个属性XML文件,如下所示: 我该怎么解决这个?

  • 我在学习MVC1.0教程时遇到了这个错误。 [ERROR]原因:org.jboss.weld.exceptions.deploymentexception:weld-001408:带有限定符的类型模型的依赖关系不满足@default在注入点[BackedAnnotatedField]@inject ch.xxx.controller.usercontroller.Models在ch.xxx.con

  • 我看了所有类似的问题,没有一个能帮助我,所以事情是这样的: 为了在不同的程序中重现错误,我创建了一个简单的Spring Boot程序。在尝试运行它时,我遇到了一个我无法解决的非常奇怪的错误: 相关类别: 通用域名格式。实例演示。演示应用程序。爪哇: com.example.demo.configs.RootConfiguration.java 通用域名格式。实例演示。控制器。测试控制器。爪哇: 我

  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入

  • 我正在尝试使用cucumber框架与selenium和appium,但在执行cucumber特性时,我得到以下异常: @CucumberOptions(features={“src//test//java//feature”},glue={“pages”},plugin={“pretty”,“html:target/cucumber”},tags={“@web”,“@test”,“@appium”