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