我正在使用 spring boot 连接到 Cassandra 数据库。我在启动时收到错误消息
Error creating bean with name 'abcItemsRepository' defined in com.myspace.mycompany.repository defined in @EnableCassandraRepositories declared on CassandraRepositoriesRegistrar.EnableCassandraRepositoriesConfiguration: Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'
请帮我修复它。 以下是我的配置和存储库:
@Table("abc_items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OboItems {
@Id
@PrimaryKeyColumn(name = "item_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
@Column(name = "item_id")
private String itemId;
@Column(name = "last_scheduled_time")
private Date lastScheduledTime;
}
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
public interface OboItemsRepository extends CassandraRepository<OboItems,String> {
}
spring.data.cassandra.contact-points=<my-end-point>
spring.data.cassandra.port=9042
spring.data.cassandra.username=<username>
spring.data.cassandra.password=<password>
spring.data.cassandra.keyspace-name=<mykeyspace>
spring.data.cassandra.session.timeout=30000
我尝试配置从 AbstractCassandraConfiguration 扩展的 CassandraConfig。但我没有运气。 我期望应用程序成功启动并能够以 JPA 风格运行 cassandra 查询。
除了 application.properties 文件中的配置之外,我还能够使用以下配置来修复它。
@Configuration
@PropertySource(value = { "classpath:application.properties" })
@EnableCassandraRepositories(basePackages = "com.walmartlabs.cia.MatchReconciler.cassandra")
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${spring.data.cassandra.keyspace-name}")
private String keySpace;
@Value("${spring.data.cassandra.contact-points}")
private String contactPoints;
@Value("${spring.data.cassandra.dc}")
private String datacenter;
@Value("${spring.data.cassandra.port}")
private int port;
@Value("${spring.data.cassandra.username}")
private String username;
@Value("${spring.data.cassandra.password}")
private String password;
@Value("${spring.data.cassandra.keyspace-name}")
private String keyspaceName;
@Override
protected String getContactPoints() {
return contactPoints;
}
@Override
protected String getKeyspaceName() {
return keySpace;
}
@Override
protected int getPort() {
return port;
}
@Override
protected String getLocalDataCenter() {
return datacenter; // Adjust as per your setup
}
@Bean
@Override
public CqlSessionFactoryBean cassandraSession() {
CqlSessionFactoryBean cassandraSession = super.cassandraSession();//super session should be called only once
cassandraSession.setUsername(username);
cassandraSession.setPassword(password);
cassandraSession.setContactPoints(contactPoints);
cassandraSession.setPort(port);
cassandraSession.setLocalDatacenter(datacenter);
cassandraSession.setKeyspaceName(keySpace);
return cassandraSession;
}
@Override
protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
return new SessionBuilderConfigurer() {
@Override
public CqlSessionBuilder configure(CqlSessionBuilder cqlSessionBuilder) {
log.info("Configuring CqlSession Builder");
return cqlSessionBuilder
.withConfigLoader(DriverConfigLoader.programmaticBuilder()
// Resolves the timeout query 'SELECT * FROM system_schema.tables' timed out after PT2S
.withDuration(DefaultDriverOption.METADATA_SCHEMA_REQUEST_TIMEOUT, Duration.ofMillis(60000))
.withDuration(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT, Duration.ofMillis(60000))
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofMillis(15000))
.build());
}
};
}