如何使用mongodb应用程序在春季启动中修复UnsatisfiedDependencyException?

时间:2019-05-13 10:00:53

标签: java database spring mongodb spring-boot

我正在尝试将Spring Boot应用程序数据库从H2更改为MongoDB。 我已经更新了application.properties文件 并删除了所有“ @Entity”和“ @Column” 并添加了“ @Document”。 我收到的错误是:

  

说明:

     

smartspace.dao.rdb.RdbActionDao中的构造函数的参数0需要找不到名为'mongoTemplate'的bean。

     

操作:

     

考虑在您的配置中定义一个名为“ mongoTemplate”的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);

}

这是我的ActionDao:

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 个答案:

答案 0 :(得分:0)

我认为mongoTemplate存在依赖项问题。请将此代码添加到您的岛中。

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

认为,这可能对您有所帮助mongo()是您的mongo客户。

答案 1 :(得分:0)

此问题已通过导入正确的库并通过spring.data ....而不是从javax使用ID注释得以解决。一个。