我的数据在不同的键空间上,我在 Spring Boot 应用程序中有多个键空间,所以我希望我的 cassandra 存储库可以配置不同的键空间,而不是在应用程序级别有一个键空间。在一个春季项目中,我看起来像一个键空间应该可以在存储库级别进行配置。
Cassandra 存储库始终使用application.properties 文件中的密钥空间,如果我扩展AbstractCassandraConfiguration类并配置密钥空间和端口,则无法正常工作。我创建了一个实体、CassandraConfig 和存储库,并尝试使用存储库查询和更新实体。请参阅下面的代码。
pom.xml
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>2.0.7.RELEASE</version>
</dependency>
实体代码:-
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
@Table
public class Company {
@PrimaryKey
private String companyid;
private String companyName;
private String address;
public String getCompanyid() {
return companyid;
}
public void setCompanyid(String companyid) {
this.companyid = companyid;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Cassandra 配置代码:-
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
@Configuration
@EnableCassandraRepositories(basePackageClasses=CompanyRepository.class)
public class CassandraConfig extends AbstractCassandraConfiguration {
public String getContactPoints() {
return "127.0.0.1";
}
@Override
protected String getKeyspaceName() {
return "CompanyDetails";
}
}
存储库代码:-
import java.util.List;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface CompanyRepository extends CassandraRepository<Company, String> {
@Query(allowFiltering=true)
public Company findByCompanyName(String companyname);
public List<Company> findAll();
}
我尝试使用扩展 AbstractCassandraConfiguration 而不是 application.properties 的类为存储库设置键空间。它不起作用 cassandraTemplate 工作正常。我只遇到了存储库的问题。即使我创建和配置 CassandraClusterFactoryBean、CassandraMappingContext、CassandraConverter 和 CassandraSessionFactoryBean bean 存储库也会抛出异常
com.datastax.driver.core.exceptions.InvalidQueryException: No keyspace has been specified. USE a keyspace, or explicitly specify keyspace.tablename
at com.datastax.driver.core.Responses$Error.asException(Responses.java:147) ~[cassandra-driver-core-3.4.0.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179) ~[cassandra-driver-core-3.4.0.jar:na]
如果我将以下条目添加到 application.properties 文件,那么它工作正常。
spring.data.cassandra.port=9042
spring.data.cassandra.keyspace-name=CompanyDetails
spring.data.cassandra.contact-points=127.0.0.1
是否可以通过扩展 AbstractCassandraConfiguration 类而不是 application.properties 的类为存储库设置键空间?
如果我错过或做错了什么,请随时指出。