1

我的 spring-boot/spring-data-cassandra 应用程序过去在 Cassandra 2.1 上运行良好,但是当我将 Cassandra 升级到 3.3 时,它无法再连接 Cassandra 服务器。所以在 pom 文件中我决定使用特定的 spring-data-cassandra 模块(1.3.2.RELEASE)。我希望新版本的 spring-data-cassandra 模块将使用最新的 Cassandra Java 驱动程序。尽管新的 spring-data-cassandra 模块使用了更新版本(2.1.5)的 cassandra 驱动程序,但当我运行应用程序时它引发了一个奇怪的异常:

[...CassandraConfig.class]; 嵌套异常是 java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.cassandra.repository.config.EnableCassandraRepositories.repositoryBaseClass()

有谁知道为什么会引发这个异常?该代码适用于 Cassandra 2.1/spring-data-cassandra 1.1.3。

spring-data-cassandra 是否支持 Cassandra 3.3.0?

CassandraConfig 类的源代码如下:

@Configuration
@PropertySource(value={"classpath:/device/repo/cassandra.properties"})
@EnableCassandraRepositories("device.repo")
public class CassandraConfig {

@Autowired
private Environment env;

@Bean
public CassandraClusterFactoryBean cluster() {
    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
    cluster.setContactPoints(getContactPoints());
    cluster.setPort(getPort());
    return cluster;
}

@Bean
public CassandraMappingContext mappingContext() {
    return new BasicCassandraMappingContext();
}

@Bean
public CassandraConverter converter() {
    return new MappingCassandraConverter(mappingContext());
}

@Bean
public CassandraSessionFactoryBean session() throws Exception {

    CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
    session.setCluster(cluster().getObject());
    session.setKeyspaceName(getKeyspaceName());
    session.setConverter(converter());
    session.setSchemaAction(SchemaAction.NONE);
    return session;
}   

@Bean
public CassandraOperations cassandraTemplate() throws Exception {
    return new CassandraTemplate(session().getObject());
}

protected String getKeyspaceName() {
    return env.getProperty("cassandra.keyspace");
}   


protected String getContactPoints() {
    return env.getProperty("cassandra.contactpoints");
}

protected int getPort() {
    return Integer.parseInt(env.getProperty("cassandra.port"));
}
}

非常感谢!

4

0 回答 0