我开始寻找一个很好的解决方案,如何使用Spring CassandraOperations很好地持久化实体.问题开始是因为我的实体中的某些字段不支持cassandra,例如joda DateTime.
解决方法是在java.util.Date类型的同一实体中使用其他字段而不是joda DateTime,使用@Transient标记不需要的字段.但这不干净,所以我开始寻找自动自定义转换.
目前spring-data-cassandra参考文献没有提供如何注册自定义转换器的信息.http://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#cassandra.custom-converters
是否可以在CassandraSessionFactoryBean中注册自定义转换器(如此处为Spring Data Cassandra LocalDateTime Conversion)?
这是我的代码@Configuration public class CassandraConfig {
@Value("${cassandra.contactpoints}")
private String cassandraContactPoint;
@Value("${cassandra.port}")
private int cassandraPort;
@Value("${cassandra.keyspace}")
private String cassandraKeySpace;
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints(cassandraContactPoint);
cluster.setPort(cassandraPort);
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(cassandraKeySpace);
session.setConverter(converter());
session.setSchemaAction(SchemaAction.NONE); …Run Code Online (Sandbox Code Playgroud) 我使用Grafana(v2.1.3)进行指标可视化.指标来自collectd收集的Graphite.目标图形是显示自由磁盘空间百分比为多个节点,例如假设文件夹是/ data,因此表示以字节为单位的可用空间的度量标准是:
collectd.$node.df-data.df_complex-free
Run Code Online (Sandbox Code Playgroud)
表示总空间的指标是以下总和:
collectd.$node.df-data.*
Run Code Online (Sandbox Code Playgroud)
所以,我有以下配置:
Series A: collectd.$node.df-data.df_complex-free (Invisible)
Series B: collectd.$node.df-data.* (Invisible)
Series C: alias(asPercent(#A, sumSeries(#B)), 'Free space')
Run Code Online (Sandbox Code Playgroud)
这里$ node是一个从下拉列表中选择的变量(All,node1,node2,node3等).它的工作原理当选择一个特定节点如预期,但错误的所有选项被选中,(例如,如果每个节点的比例为〜95%,那么当所有被选中的24%显示).
另一种选择(可能更可取:
Series A: collectd.$node.df-data.df_complex-free
Series B: groupByNode(collectd.$node.df-data.*, 1, 'sum')
Series C: scale(divideSeries(#A, #B), 100)
Run Code Online (Sandbox Code Playgroud)
同样对于单个节点它很好,但是一旦选择了"所有节点"选项,则显示以下错误:
divideSeries第二个参数必须正好引用1个系列
有任何想法吗?我相信应该有简单的解决方案.