【问题标题】:Error creating bean with name 'sessionBuilderCustomizer' defined in com.example.betterreadsDataloader.BetterreadsDataloader1Application创建 com.example.betterreadsDataloader.BetterreadsDataloader1Application 中定义的名称为“sessionBuilderCustomizer”的 bean 时出错
【发布时间】:2022-07-28 17:16:34
【问题描述】:

我正在使用 Cassandra 创建这个弹簧靴,当尝试与 Cassandra 建立连接时,我收到了这个错误。请帮忙:

org.springframework.beans.factory.BeanCreationException: Error creating bean \
  with name 'sessionBuilderCustomizer' defined in \
  com.example.betterreadsDataloader.BetterreadsDataloader1Application: \
  Bean instantiation via factory method failed; \
  nested exception is org.springframework.beans.BeanInstantiationException: \
  Failed to instantiate [org.springframework.boot.autoconfigure.cassandra.CqlSessionBuilderCustomizer]: \
  Factory method 'sessionBuilderCustomizer' threw exception; \
  nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.20.jar:5.3.20]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.20.jar:5.3.20]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.20.jar:5.3.20]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.0.jar:2.7.0]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.0.jar:2.7.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.0.jar:2.7.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.0.jar:2.7.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.0.jar:2.7.0]
    at com.example.betterreadsDataloader.BetterreadsDataloader1Application.main(BetterreadsDataloader1Application.java:20) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.7.0.jar:2.7.0]
package com.example.betterreadsDataloader;

import java.nio.file.Path;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.cassandra.CqlSessionBuilderCustomizer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

import com.example.betterreadsDataloader.connection.DataStaxAstraProperties;



@SpringBootApplication
@EnableConfigurationProperties(DataStaxAstraProperties.class)
public class BetterreadsDataloader1Application {

    public static void main(String[] args) {
        SpringApplication.run(BetterreadsDataloader1Application.class, args);
    }
    @Bean
    public CqlSessionBuilderCustomizer sessionBuilderCustomizer(DataStaxAstraProperties astraProperties) {
        Path bundle = astraProperties.getSecureConnectBundle().toPath();
        return builder -> builder.withCloudSecureConnectBundle(bundle);
    }
    
}
package com.example.betterreadsDataloader.connection;

import java.io.File;

import org.springframework.boot.context.properties.ConfigurationProperties;



@ConfigurationProperties(prefix="datastax.astra")
public class DataStaxAstraProperties {

    private File secureConnectBundle;

    public File getSecureConnectBundle() {
        return secureConnectBundle;
    }

    public void setSecureConnectBundle(File secureConnectBundle) {
        this.secureConnectBundle = secureConnectBundle;
    }
}

application.yml

spring:
  data:
    cassandra:
       keyspace-name: xxx
       username: xxx
       password: xxxx
       schema-action: create-if-not-exists
       request:
        timeout:10s
       connection:
        connect-timeout:10s
        init-query-timeout:10s
        
       
datastax.astra:
     secure-connect-bundle:secure-connect-booktracker.zip
     
astra.db:
   id:xxx
   region:xxx
   namespace:main
   application.token:xxx
   

【问题讨论】:

  • 这个secure-connect-booktracker.zip 在哪里?如果这是您的应用程序的一部分,则它不是文件而是资源。 java.io.File 是文件系统上的物理文件,如果它打包在 jar 文件中,则它不是文件系统上的物理文件。

标签: spring-boot cassandra datastax-astra


【解决方案1】:

看起来您正在执行来自Java BrainsBetterReads coding series

sessionBuilderCustomizer 中的 NullPointerException 可能意味着它无法找到您的安全连接包 (SCB)。根据 Koushik 的工作坊,您需要将 SCB 放在项目的src/main/resources/ 目录中。

检查您是否已根据研讨会正确配置项目,然后尝试再次运行该应用。干杯!

【讨论】:

  • 嗨 Eric 感谢您的回答我已经仔细检查过,它位于 src/main/resources/ 目录中,不知道为什么会出现此错误。
  • 我认为 Eric 是正确的,找不到文件,Path bundle = astraProperties.getSecureConnectBundle().toPath(); 会给你 NPE,其他一切看起来都不错。尝试从secure-connect-booktracker.zip 更改为src/main/resources/secure-connect-booktracker.zip 你可能需要帮助Spring。
  • 另外仅供参考,我在这里创建了一个专门的研讨会github.com/datastaxdevs/workshop-betterreads 对代码进行了相当多的改进,尤其是数据加载器的速度提高了 400 倍。
【解决方案2】:

检查您的 application.yml 文件可能存在一些缩进问题。它解决了我的问题。

【讨论】:

    猜你喜欢
    • 2020-09-15
    • 1970-01-01
    • 2015-09-24
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多