【问题标题】:Spring-data-cassandra: Error creating bean with name 'sessionFactory' and Cannot resolve reference to bean 'cassandraTemplate'Spring-data-cassandra:创建名为“sessionFactory”的bean时出错,并且无法解析对bean“cassandraTemplate”的引用
【发布时间】:2020-09-27 18:09:43
【问题描述】:

我有一个 springboot 应用程序,我在其中连接到 cassandra DB。

我的 pom.xml:

parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
    </dependency>

cassandraConfig 定义:

@Configuration
@PropertySource("file:///Users/s1b03vf/Work/carrierhub/cass.properties")
@ConfigurationProperties()
@EnableCassandraRepositories(basePackageClasses = {MCSEDistributorRepository.class})
public class MSCECassandraConfig {
protected String contactPoints;

protected int port;

protected String username;

protected String password;

protected String keyspace;


@Override
protected AuthProvider getAuthProvider() {
    return new PlainTextAuthProvider(username, password);
}


@Override
protected String getKeyspaceName() {
    return keyspace;
}


@Override
protected String getContactPoints() {
    return contactPoints;
}


@Override
protected int getPort() {
    return port;
}


@Override
public String[] getEntityBasePackages() {
    return new String[]{"com.example.demo.entity.cassandra"};
}
}

存储库类:

@Repository
public interface MCSEDistributorRepository extends CassandraRepository<MCSEDistributor, String> {

}

实体类:

    @Table("mcse_offer")
    public class MCSEDistributor {
        @Column
        @PrimaryKey
        private int id;

        @Column
        private String name;
}

现在当我启动我的应用程序时,我遇到了以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'documentationPluginsBootstrapper' defined in URL [jar:file:/Users/s1b03vf/.m2/repository/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2.jar!/springfox/documentation/spring/web/plugins/DocumentationPluginsBootstrapper.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcRequestHandlerProvider' defined in URL [jar:file:/Users/s1b03vf/.m2/repository/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2.jar!/springfox/documentation/spring/web/plugins/WebMvcRequestHandlerProvider.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Unsatisfied dependency expressed through method 'requestMappingHandlerMapping' parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcConversionService' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.format.support.FormattingConversionService]: Factory method 'mvcConversionService' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MCSEDistributorRepository': Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraTemplate' defined in class path resource [com/example/demo/config/MSCECassandraConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.core.CassandraAdminTemplate]: Factory method 'cassandraTemplate' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/example/demo/config/MSCECassandraConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.SessionFactory]: Factory method 'sessionFactory' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in class path resource [com/example/demo/config/MSCECassandraConfig.class]: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.DriverInternalError: Unexpected exception thrown

它表示 cassandraTemplate 和 sessionFactory 的依赖关系和 bean 创建问题。我是使用 spring-data 的新手,所以不确定我在这里缺少什么。

从启动日志中,我可以看到它正在使用以下驱动程序版本:

2020-06-08 22:44:57.782  INFO 42129 --- [  restartedMain] com.datastax.driver.core                 : DataStax Java driver 3.7.2 for Apache Cassandra

【问题讨论】:

  • 嘿。此错误与弹簧数据无关。您在初始化 cassandra 驱动程序时遇到问题。你能分享驱动程序属性文件吗?我还建议你看看这个很棒的教程,很容易理解并一步一步地遵循baeldung.com/cassandra-datastax-java-driver
  • "驱动程序属性文件" ?它存储在哪里?
  • 您似乎缺少会话部分。看看上面的教程,它会解决你的问题。
  • 你已经分享过了,我错过了...没关系
  • 但这不是已经被 spring-data-cassandra 处理了吗?

标签: java spring-boot cassandra datastax-java-driver spring-data-cassandra


【解决方案1】:

解决了这个问题。问题是 CassandraConfig 类缺少这个:

@Override
    protected boolean getMetricsEnabled() {
        return false;
    } 

添加了这个,它开始运行良好。

【讨论】:

    【解决方案2】:

    尝试调用 super 然后设置所需的属性

    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster = super.cluster();
        
        cluster.setContactPoints("127.0.0.1");
        cluster.setPort(9142);
    
        return cluster;
    }
    

    【讨论】:

      【解决方案3】:

      您的@configuration 课程有问题。它没有@bean 注释。看看这个例子 cassandra @configuration 类来自:https://www.baeldung.com/spring-data-cassandra-tutorial

      @Configuration
      public class CassandraConfig extends AbstractCassandraConfiguration {
      
          @Override
          protected String getKeyspaceName() {
              return "testKeySpace";
          }
      
          @Bean
          public CassandraClusterFactoryBean cluster() {
              CassandraClusterFactoryBean cluster = 
                new CassandraClusterFactoryBean();
              cluster.setContactPoints("127.0.0.1");
              cluster.setPort(9142);
              return cluster;
          }
      
          @Bean
          public CassandraMappingContext cassandraMapping() 
            throws ClassNotFoundException {
              return new BasicCassandraMappingContext();
          }
      }
      

      还有关于如何配置存储库和表的说明。

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 2016-10-22
        • 1970-01-01
        • 2013-03-04
        • 2014-08-24
        • 2018-04-29
        • 1970-01-01
        • 2016-06-05
        • 2010-12-07
        相关资源
        最近更新 更多