我的 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"));
}
}
非常感谢!