上下文:Spring数据cassandra官方1.0.2.RELEASE来自Maven Central repo,CQL3,cassandra 2.0,datastax driver 2.0.4
背景:cassandra blob数据类型映射到Java ByteBuffer.
下面的示例代码演示了您不会使用等效插入旁边的select来检索正确的字节.实际检索的数据以许多垃圾字节为前缀,实际上看起来像是整行的序列化.这篇与Cassandra 1.2相关的老帖子提示我们可能必须从长度为ByteBuffer.remaining()的ByteBuffer.arrayOffset()开始,但是arrayOffset值实际上是0.
我发现了一个spring-data-cassandra 2.0.0.SNAPSHOT但CassandraOperations API有很大的不同,它的包名也是:org.springdata ...与org.springframework ...
帮助解决这个问题,但非常欢迎.
与此同时,我似乎必须将Base64的二进制数据编码/解码到文本数据类型列.
---这里是我使用的简单表CQL元数据-------------
CREATE TABLE person (
id text,
age int,
name text,
pict blob,
PRIMARY KEY (id)
) ;
Run Code Online (Sandbox Code Playgroud)
---跟随映射到CQL表的简单数据对象---
package org.spring.cassandra.example;
import java.nio.ByteBuffer;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
@Table
public class Person {
@PrimaryKey
private String id;
private int age;
private String name;
private ByteBuffer pict;
public Person(String id, int age, String name, ByteBuffer pict) {
this.id = id; this.name = …Run Code Online (Sandbox Code Playgroud) 在使用Spring-data的cassandra模块进行映射时,建议将Joda时间映射到Cassandra的Date类型的方法是什么?在JPA/Hibernate中是否有@Type注释的等价物?
我想创建如下模型,如何在spring-data-cassandra中使用用户定义的类型?
{
email: "test@example.com",
name: {
fname: "First",
lname: "Last"
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有日期类型列的cassandra表,如下所示:
create table people
(
id int primary key,
name text,
email text,
dob date
);
Run Code Online (Sandbox Code Playgroud)
我正在使用SpringBoot 1.5.2 + Spring Data Cassandra Starter.
@Table("people")
public class Person {
@PrimaryKey
Integer id;
private String name;
private String email;
private java.util.Date dob;
//setters and getters
}
public interface PersonRepository extends CrudRepository<Person, Integer>{
}
Run Code Online (Sandbox Code Playgroud)
我按如下方式插入新人:
personRepository.save(new Person(1, "Siva","siva@gmail.com", new java.util.Date()));
Run Code Online (Sandbox Code Playgroud)
它抛出以下错误:
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Expected 4 byte long for date (8)
at com.datastax.driver.core.Responses$Error.asException(Responses.java:136) ~[cassandra-driver-core-3.1.4.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179) ~[cassandra-driver-core-3.1.4.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:177) ~[cassandra-driver-core-3.1.4.jar:na]
at com.datastax.driver.core.RequestHandler.access$2500(RequestHandler.java:46) ~[cassandra-driver-core-3.1.4.jar:na] …Run Code Online (Sandbox Code Playgroud) 我正在研究 Spring data Cassandra 在创建实体时,我为字段提供了所需的注释,但是当我为在架构中创建二级索引提供 @Indexed 注释时,我无法在不提供允许的情况下查询索引属性过滤。有人可以告诉我如何在 Cassandra 中使用 Spring 数据注释创建二级索引吗
This is the sample cod that I am using creating a Sprind data Cassandra Entity.@Indexed annotation not creating a secondary index in Cassandra database
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.springframework.data.cassandra.mapping.CassandraType;
import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.Indexed;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
import org.springframework.data.cassandra.mapping.UserDefinedType;
import com.datastax.driver.core.DataType;
import com.suntecgroup.xelerate.platform.demo.config.SpringContainer;
import com.suntecgroup.xelerate.platform.demo.store.CustomerCassandraStore;
import com.suntecgroup.xelerate.platform.demo.store.impl.CustomerCassandraStoreImpl;
@Table(value="CustomerCassandra")
public class CustomerCassandra extends CassandraEntity<Integer> {
@PrimaryKey(value="cust_id")
private Integer custId;
@Indexed(value="name")
private String name;
@Indexed(value="email")
private String email; …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的 spring 数据 cassandra 项目,其应用程序上下文无法启动。整个项目由四个文件组成:域对象、存储库接口、cassandra 配置和应用程序入口点。这是域对象:
@Table
public class User {
@PrimaryKeyColumn(name = "user_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
public UUID userId;
}
Run Code Online (Sandbox Code Playgroud)
和存储库界面:
@Repository
public interface UserRepository extends PagingAndSortingRepository<User, UUID> {
}
Run Code Online (Sandbox Code Playgroud)
配置非常简单:
@Configuration
public class TestSpringDataCassandraConfiguration extends AbstractCassandraConfiguration {
@Override
protected String getKeyspaceName() {
return "company";
}
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
return Collections.singletonList(CreateKeyspaceSpecification
.createKeyspace(getKeyspaceName())
.ifNotExists()
.withSimpleReplication(1));
}
@Override
public String[] getEntityBasePackages() {
return new String[] { "com.company.project.cassandra.entity"};
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
} …Run Code Online (Sandbox Code Playgroud) spring cassandra spring-data spring-boot spring-data-cassandra
我正在寻找一种解决方案,通过 Cassandra(版本)数据库为基于 Spring Boot 的 REST 服务实现分页3.11.3。我们使用 Spring Boot2.0.5.RELEASE作为spring-boot-starter-data-cassandra依赖项。
由于 Spring Data 的CassandraRepository<T, ID>接口没有扩展,PagingAndSortingRepository我们无法获得像JPA.
我阅读了 Spring Data Cassandra 文档,并找到了一种使用 Cassandra 和 Spring Data 实现分页的可能方法,因为该CassandraRepository接口具有以下可用方法Slice<T> findAll(Pageable pageable);。我知道 Cassandra 无法获取特定的临时页面,并且始终需要第 0 页来迭代所有页面,如下所示CassandraPageRequest:
Cassandra 特定的 {@link PageRequest} 实现提供对 {@link PagingState} 的访问。此类允许创建第一个页面请求,并表示通过 Cassandra 分页基于获取页面的进度,并允许仅向前导航。访问特定页面需要获取所有页面,直到到达所需页面。
在我的用例中,我们有 > 1.000.000 个数据库条目,并且希望在单页应用程序中分页显示它们。
我当前的方法如下所示:
@RestController
@RequestMapping("/users")
public class UsersResource {
@Autowired
UserRepository userRepository;
@GetMapping
public ResponseEntity<List<User>> getAllTests(
@RequestParam(defaultValue = "0", …Run Code Online (Sandbox Code Playgroud) java cassandra spring-data spring-boot spring-data-cassandra
我为与 Cassandra 一起使用的 Spring Boot 应用程序开发了集成测试。我CassandraTemplate用于与 Cassandra 通信。
我对数据库src/test/resources/application.properties有以下配置:
spring.data.cassandra.contact-points=cassandra-host
spring.data.cassandra.port=9042
Run Code Online (Sandbox Code Playgroud)
要Testcontainers使用 Cassandra创建,我尝试了两种方法:
1) https://niels.nu/blog/2017/spring-cassandra-integration-tests.html
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = {ExampleApplication.class})
@ContextConfiguration(initializers = CounterIntegrationTestContainers.Initializer.class)
@EnableConfigurationProperties
public class CounterIntegrationTestContainers extends CounterIntegrationTest {
@ClassRule
public static GenericContainer cassandra =
new GenericContainer("cassandra:3")
.withExposedPorts(9042);
public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
EnvironmentTestUtils.addEnvironment(
"testcontainers",
configurableApplicationContext.getEnvironment(),
"cassandra.host=" + cassandra.getContainerIpAddress(),
"cassandra.port=" + cassandra.getMappedPort(9042)
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
2) https://www.baeldung.com/spring-boot-testcontainers-integration-test - 在本例中我们可以看到 postgresql 容器,但我将其更改为 Cassandra:
public …Run Code Online (Sandbox Code Playgroud) cassandra spring-boot spring-data-cassandra spring-boot-test testcontainers
我正在尝试通过扩展在我的应用程序中配置 CassandraCassandraAutoConfiguration
我使用 springCassandraRepository进行数据库访问,并使用带有o.s.d.cassandra.core.mapping.Table注释的类来定义我的表。
我还配置了以下属性以及集群所需的其他属性
spring:
data:
cassandra:
schema-action: CREATE_IF_NOT_EXISTS
Run Code Online (Sandbox Code Playgroud)
但应用程序启动时 Cassandra 中不会创建任何表。
schemaAction在CassandraProperties 不工作。
如果我在启动时ApplicationRunner通过使用以编程方式创建表cassandraTemplate.getCqlOperations().execute(...),那么一切都会正常工作。
在这种情况下,我可以使用我的存储库。find() 和 save() 方法。只是为了证明我的@table类写得正确
我正在尝试创建一个 Spring Boot (2.7.5) 项目,该项目写入 Cassandra (使用 Spring Data cassandra)并使用 Spark 从 Cassandra 读取。当我将 Spark Master 作为 local[*] 提供时,它工作正常,但当我尝试连接到 Spark Cluster Master URL 时,出现如下错误。
卡桑德拉版本 - 4.0.1
火花版本 - 3.1.3
2022-11-17 11:45:03 - Code generated in 2093.165617 ms
2022-11-17 11:45:03 - Starting job: show at HomeController.java:26
2022-11-17 11:45:03 - Got job 0 (show at HomeController.java:26) with 1 output partitions
2022-11-17 11:45:03 - Final stage: ResultStage 0 (show at HomeController.java:26)
2022-11-17 11:45:03 - Parents of final stage: List()
2022-11-17 11:45:03 - …Run Code Online (Sandbox Code Playgroud) cassandra apache-spark spring-data-cassandra spark-cassandra-connector
cassandra ×8
spring ×5
spring-boot ×5
java ×3
spring-data ×3
apache-spark ×1
blob ×1
bytebuffer ×1
datastax ×1