我在想,如果我创建一个文本列,而不是使用uuid列创建Cassandra表,最后我将在其中插入Java.util.uuid.random字符串.因此,如果我使用文本代替Cassandra单向,那么性能方面会有什么不同
我有这个项目,我正在尝试根据配置连接到不同的数据库类型.我有它为Mongo和MySQL工作,并通过使用加载Beans切换@ConditionalOnProperty(name = "settings.data.source", havingValue = "mongodb")
现在我想添加Cassandra,但是一旦我将以下依赖项添加到我的pom,它就开始尝试连接到localhost上的Cassandra节点.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我希望能够更好地控制何时加载Cassandra资源.
当我添加Mongo依赖项时,它不会尝试自动连接:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有谁熟悉这种行为?我该怎么控制呢?我并不总是需要Cassandra连接......
我有问题存储List的字段作为我的表的字段在cassandra数据库.
我正在使用spring-data-cassandra,版本1.4.1.RELEASE.
我的模型包含:
@Column
@CassandraType(type = DataType.Name.LIST)
private List<Integer> somedata;
Run Code Online (Sandbox Code Playgroud)
我想在我的配置类中使用SchemaAction.RECREATE_DROP_UNUSED架构操作自动创建我的db表:
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.RECREATE_DROP_UNUSED;
}
Run Code Online (Sandbox Code Playgroud)
它尝试创建表,但发生以下异常:
Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: expected 1 of typed arguments for the property 'somedata' type is 'interface java.util.List' in the entity <my class here>
Run Code Online (Sandbox Code Playgroud) 有人可以指出我如何将声明的字段list<frozen<list<int>>>映射回 spring-data-cassandra 中的 java。我可以简单地保存数据,List<List<Integer>>>但在从数据库读取时不起作用,未找到编解码器异常弹出。
非常感谢帮助。
我需要从AWS C *表中插入和提取数据。我的数据生产者是通过Java 8的Spring Boot定义的。
因此,我应该在稳定和高效的项目中使用哪一个。我有办法(我猜这里)1. Sprinda-data-JPA。2. datastax的cassandra-driver-core。
cassandra datastax-java-driver spring-data-cassandra cassandra-3.0
我正在使用 spark-sql 2.4.1、spark-cassandra-connector_2.11-2.4.1.jar 和 java8。当我试图从表中获取数据时,我遇到了
java.io.IOException: Failed to write statements to keyspace1.model_vals. The
latest exception was
An unexpected error occurred server side on cassandra-node1: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException: org.apache.cassandra.exceptions.ReadTimeoutException: Operation timed out - received only 0 responses.
Run Code Online (Sandbox Code Playgroud)
那么如何从火花代码建立到 Cassandra db 的区域/直流感知连接?
YML
现有的
spring:
data:
cassandra:
keyspace-name: raproduct
contact-points:
- cassandra-node1
- cassandra-node2
port: 9042
Run Code Online (Sandbox Code Playgroud)
变成
spring:
data:
cassandra:
connection:
local_dc: southeast-1
keyspace-name: raproduct
contact-points:
- cassandra-node1
- cassandra-node2
port: 9042
Run Code Online (Sandbox Code Playgroud)
题
但它没有反映/应用更改后的“local_dc”。如何在 spring-data 中做到这一点?
cassandra spring-data datastax-java-driver apache-spark spring-data-cassandra
我将 Spring Boot 和 Spring Data 与 Cassandra 一起使用。在应用程序启动时,spring 建立到数据库的连接以设置模式并初始化 spring 数据存储库。如果数据库不可用,应用程序将不会启动。
我希望应用程序只记录一个错误并启动。当然,我不能再使用存储库,但其他独立于数据库的服务(其余控制器等)应该可以工作。也很高兴在执行器健康检查中看到 cassandra 已关闭。
对于 JDBC,有一个spring.datasource.continue-on-error属性。我找不到与 Cassandra 类似的东西。
我还尝试创建自定义 cassandra 配置并尝试在 CqlSession 创建时捕获异常,但我无法实现所需的行为。
编辑:正如@adutra 所建议的,我尝试设置advanced.reconnect-on-init,应用程序尝试建立连接,但应用程序未完全初始化(例如无法访问 REST 控制器)
@Configuration
public class CustomCassandraConfiguration extends CassandraAutoConfiguration {
@Bean
public DriverConfigLoaderBuilderCustomizer driverConfigLoaderBuilderCustomizer() {
return builder -> builder.withBoolean(DefaultDriverOption.RECONNECT_ON_INIT, true);
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:我现在有工作示例(应用程序启动,cassandra 的自定义健康检查),但如果感觉很丑陋:
自定义Cassandra自动配置
@Configuration
public class CustomCassandraConfiguration extends CassandraAutoConfiguration {
@Bean
public DriverConfigLoaderBuilderCustomizer driverConfigLoaderBuilderCustomizer() {
return builder -> builder.withBoolean(DefaultDriverOption.RECONNECT_ON_INIT, true);
}
}
Run Code Online (Sandbox Code Playgroud)
自定义CassandraDataAutoConfiguration
@Configuration
public class CustomCassandraAutoConfiguration extends CassandraAutoConfiguration …Run Code Online (Sandbox Code Playgroud)spring cassandra spring-data spring-boot spring-data-cassandra
我正在使用 Spring Data Cassandra 1.3.4.RELEASE 来保留我拥有的类的实例。该类是用 Groovy 编写的,但我认为这并不重要。我已经实现了一个 CrudRepository,我正在将一个 CassandraOperations 实例注入到 repo 实现类中。我可以成功插入、删除和执行大多数其他操作。但是,我遇到的一个场景会破坏我的测试用例。我的实体类看起来像这样:
@Table("foo")
class FooData {
@PrimaryKey("id")
long id
@Column("created")
long updated
@Column("name")
String name
@Column("user_data")
String userData
@Column("numbers")
List numberList = []
}
Run Code Online (Sandbox Code Playgroud)
在我的测试用例中,我碰巧在调用 CassandraOperations.insert(entity) 之前只设置了几个字段,例如 'id' 和 'updated',因此在插入时实体实例中的大多数字段为空。但是 numberList 字段不为空,它是一个空列表。在 insert() 之后,我直接调用 CassandraOperations.selectOneById(FooData.class, id)。我得到了一个 FooData 实例,并且在我保存它时初始化的字段填充了数据。但是,我在我的测试中检查内容相等性,但它失败了,因为空列表没有作为从 CassandraOperations.selectOneById() 返回的 POJO 中的空列表返回。它实际上是空的。我认为这可能是某种 Cassandra 优化。它似乎发生在实例化 POJO/实体的 CGLIB 代码中。这是一个众所周知的“