我开始寻找一个很好的解决方案,如何使用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)?
@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);
return session;
}
@Bean
public CassandraOperations cassandratemplate() throws Exception {
return new Cassandratemplate(session().getobject());
}
@Bean
public ConversionService getConversionService() {
ConversionServicefactorybean bean = new ConversionServicefactorybean();
bean.setConverters(new HashSet<>(getConverters()));
bean.afterPropertiesSet();
return bean.getobject();
}
private Setjsr310Converters.getConvertersToRegister());
converters.add(new DateTimeWriteConverter());
converters.add(new DateTimeReadConverter());
return converters;
}
public static class DateTimeWriteConverter implements Converter
}
最佳答案
当您创建CassandraCustomConversions bean时,Spring Cassandra的自定义转换会起作用.只需添加自定义转换器,默认转换器就会保留.下面是我的@Configuration类.
@Bean
CassandraCustomConversions cassandraCustomConversions() {
Listprintstacktrace();
}
return null;
}
}
我正在使用基于SpringBoot 2.0.0.RELEASE的spring-boot-starter-data-cassandra.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。