У меня есть данные в разных пространствах ключей, у меня более одного пространства ключей в приложении с весенней загрузкой, поэтому я хочу, чтобы мои репозитории cassandra конфигурировались с разными пространствами ключей каждое, а не с одним пространством ключей на уровне приложения.В весеннем проекте, я смотрю что-то вроде пространства ключей должно быть настраиваемым на уровне репозитория.
Cassandra Repository всегда использует keyspace из файла application.properties, не работает, если ярасширить AbstractCassandraConfiguration класс и настроить пространство ключей и порт.Я создал Entity, CassandraConfig и Repository и попытался запросить и обновить Entity с помощью Respository.См. Мой код ниже.
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, бобовый репозиторий выбрасывает ниже исключения
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, тогда он работает нормально.
возможно ли установить пространство ключей для репозитория через класс, который расширяет класс AbstractCassandraConfiguration вместо application.properties?
Не стесняйтесь указывать, если я пропустил или сделал что-то не так.