使用Apache Cassandra设置一个SpringData项目

在这篇文章中,我们将使用Gradle和spring boot来创建一个将spring-mvc和Apache Cassandra数据库集成在一起的项目。

首先,我们将从Gradle配置开始

group 'com.gkatzioura'
version '1.0-SNAPSHOT'apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'buildscript {repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")}
}jar {baseName = 'gs-serving-web-content'version =  '0.1.0'
}repositories {mavenCentral()
}sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile "org.springframework.boot:spring-boot-starter-thymeleaf"compile "org.springframework.data:spring-data-cassandra:1.2.2.RELEASE"compile 'org.slf4j:slf4j-api:1.6.6'compile 'ch.qos.logback:logback-classic:1.0.13'testCompile "junit:junit"
}task wrapper(type: Wrapper) {gradleVersion = '2.3'
}

我们将在我们的Cassandra数据库中创建键空间和表:

CREATE KEYSPACE IF NOT EXISTS example WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;CREATE TABLE IF NOT EXISTS example.greetings (user text,id timeuuid,greet text,creation_date timestamp,PRIMARY KEY (user, id)
) WITH CLUSTERING ORDER BY (id DESC);

我们可以使用cqlsh运行包含cql语句的文件

cqlsh -f database_creation.cql

Cassandra连接信息将位于META-INF / cassandra.properties中

cassandra.contactpoints=localhost
cassandra.port=9042
cassandra.keyspace=example

现在,我们可以使用spring注释继续进行Cassandra配置。

package com.gkatzioura.spring.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.cassandra.config.CassandraClusterFactoryBean;
import org.springframework.data.cassandra.config.CassandraSessionFactoryBean;
import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.convert.MappingCassandraConverter;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.mapping.BasicCassandraMappingContext;
import org.springframework.data.cassandra.mapping.CassandraMappingContext;
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;@Configuration
@PropertySource(value = {"classpath:META-INF/cassandra.properties"})
@EnableCassandraRepositories(basePackages = {"com.gkatzioura.spring"})
public class CassandraConfig {@Autowiredprivate Environment environment;private static final Logger LOGGER = LoggerFactory.getLogger(CassandraConfig.class);@Beanpublic CassandraClusterFactoryBean cluster() {CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();cluster.setContactPoints(environment.getProperty("cassandra.contactpoints"));cluster.setPort(Integer.parseInt(environment.getProperty("cassandra.port")));return cluster;}@Beanpublic CassandraMappingContext mappingContext() {return new BasicCassandraMappingContext();}@Beanpublic CassandraConverter converter() {return new MappingCassandraConverter(mappingContext());}@Beanpublic CassandraSessionFactoryBean session() throws Exception {CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();session.setCluster(cluster().getObject());session.setKeyspaceName(environment.getProperty("cassandra.keyspace"));session.setConverter(converter());session.setSchemaAction(SchemaAction.NONE);return session;}@Beanpublic CassandraOperations cassandraTemplate() throws Exception {return new CassandraTemplate(session().getObject());}}

然后,我们创建Greeting实体。

package com.gkatzioura.spring.entity;import com.datastax.driver.core.utils.UUIDs;
import org.springframework.cassandra.core.PrimaryKeyType;
import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.mapping.Table;import java.util.Date;
import java.util.UUID;@Table(value = "greetings")
public class Greeting {@PrimaryKeyColumn(name = "id",ordinal = 1,type = PrimaryKeyType.CLUSTERED)private UUID id = UUIDs.timeBased();@PrimaryKeyColumn(name="user",ordinal = 0,type = PrimaryKeyType.PARTITIONED)private String user;@Column(value = "greet")private String greet;@Column(value = "creation_date")private Date creationDate;public UUID getId() {return id;}public void setId(UUID id) {this.id = id;}public Date getCreationDate() {return creationDate;}public void setCreationDate(Date creationDate) {this.creationDate = creationDate;}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getGreet() {return greet;}public void setGreet(String greet) {this.greet = greet;}
}

为了访问数据,应该创建一个存储库。 在我们的案例中,我们将通过添加一些查询来向存储库添加一些额外的功能。

package com.gkatzioura.spring.repository;import com.gkatzioura.spring.entity.Greeting;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.data.repository.NoRepositoryBean;import java.util.UUID;public interface GreetRepository extends CassandraRepository<Greeting> {@Query("SELECT*FROM greetings WHERE user=?0 LIMIT ?1")Iterable<Greeting> findByUser(String user,Integer limit);@Query("SELECT*FROM greetings WHERE user=?0 AND id<?1 LIMIT ?2")Iterable<Greeting> findByUserFrom(String user,UUID from,Integer limit);}

现在,我们可以实现控制器,以便通过http访问数据。 通过邮寄,我们可以保存“问候语”实体。 通过获取,我们可以获取收到的所有问候。 通过指定用户,我们可以使用Cassandra查询来获取特定用户的问候。

package com.gkatzioura.spring.controller;import com.gkatzioura.spring.entity.Greeting;
import com.gkatzioura.spring.repository.GreetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.Date;
import java.util.List;@RestController
public class GreetingController {@Autowiredprivate GreetRepository greetRepository;@RequestMapping(value = "/greeting",method = RequestMethod.GET)@ResponseBodypublic List<Greeting> greeting() {List<Greeting> greetings = new ArrayList<>();greetRepository.findAll().forEach(e->greetings.add(e));return greetings;}@RequestMapping(value = "/greeting/{user}/",method = RequestMethod.GET)@ResponseBodypublic List<Greeting> greetingUserLimit(@PathVariable String user,Integer limit) {List<Greeting> greetings = new ArrayList<>();greetRepository.findByUser(user,limit).forEach(e -> greetings.add(e));return greetings;}@RequestMapping(value = "/greeting",method = RequestMethod.POST)@ResponseBodypublic String saveGreeting(@RequestBody Greeting greeting) {greeting.setCreationDate(new Date());greetRepository.save(greeting);return "OK";}}

最后但并非最不重要的是我们的Application类

package com.gkatzioura.spring;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

为了运行,只需运行:

gradle bootRun

翻译自: https://www.javacodegeeks.com/2015/08/set-up-a-springdata-project-using-apache-cassandra.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西南大学0039c语言作业答案,2017年6月西南大学继续教育学院C语言0039大作业答案...

1、假定p1和p2是已赋值的字符型指针&#xff0c;则下述有关运算中&#xff0c;非法的是(.*(p1-2p2)getchar( ); )2、循环语句for (x0,y0;(y!123)||(x<4);x)&#xff1b;的循环执行(无限次)3、设有定义"int a5,b,*p&a;"&#xff0c;执行下列语句后,b的值不为5的…

第一周学习进度表

第一周所花时间&#xff08;包括上课&#xff09;上课时间&#xff1a;4小时 周三、周五、周六各3小时阅读<<构建之法>>代码量&#xff08;行&#xff09;45博客量4了解到的知识 在上软件工程这门课使我对编程有了哟个新的认识&#xff0c;就是在编写一个复杂程序时…

前端工程师必须知道的用javaScript刷新当前页面的3种方法

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

Description 给定n(N<100)&#xff0c;编程计算有多少个不同的n轮状病毒。 Input 第一行有1个正整数n。 Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3Sample Output 16HINT Source Solution&#xff1a;推导不会&#xff0c;看不懂&#xff0c;知道了公式f[i…

cla c 语言编译器,第九章 CLA_C2000_C_Compiler.pdf

TI CLA C 编译器概述C2000 Compiler RoadmapCGT v6.2CGT v6.1ProductionCGT v6.0Early AdopterIn DevelopmentCGT v5.2FutureCurrent 11Q4 12Q1 12Q2 12Q3 12Q4 13H1 FutureC2000 CGT v5.2 C2000 CGT v6.1 C2000 CGT v6.2•Assembler support for CLA •CLA C support •Future…

新年将至, 程序员如何以代码送出新春祝福

导读:农历新年将至,祝福的话汇成千言万语都寄托在贺卡之中,也许今年你受到了很多的挫折,又或者是顺顺利利度过了一年。但不管怎么样,不管是哭与笑,人生的年轮都已经转过了一圈。我们唯有继续向前走,不要回头,未来的自己取决于现在的自己。有时候一句不经意的问候,一句…

C语言 删除文件 M,最全的C盘可删除文件清单

一、关闭Win7系统休眠功能“以管理员身份运行&#xff0c;所有程序→附件→命令提示符”&#xff0c;右击选择“以管理员身份运行”&#xff0c;进入命令提示符后&#xff0c;手工输入“powercfg -h off” 关闭Win7系统休眠功能;二、关闭系统保护计算机右键属性--高级管理设置-…

身份证/异地身份证在北京办理的解决办法

今年4月18号身份证就到期啦,赶紧抽个时间去补办一个,这种事情一般只能选在工作日,你工作别人也工作的时间段。这个是初中时期弄得身份证,都10年啦,这次在北京补办一下,老家是安徽的。又逢今年在京过年,我太难了。 需要什么材料? 一般来说需要户口本,居住证,还有快要…

小程序--显示图形效果

//运用for循环嵌套循环知识 class Alhh{ public static void main(String[] args){ for(int i0;i<5;i){//控制行数 for(int j0;j<4-i;j){//用-代替空格 System.out.print("-"); } for(int k0;k<i1;k){//*的个数 System.out.print("* "); } System…

jsf集成spring_JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目

jsf集成spring本文展示了如何集成JSF2&#xff0c;PrimeFaces3&#xff0c;Spring3和Hibernate4技术。 它为Java开发人员提供了一个通用的项目模板。 另外&#xff0c;如果Spring不用于业务和数据访问层&#xff0c;则可以提供JSF – PrimeFaces和Hibernate集成项目。 二手技…

linux rc4,Linux kernel 4.8-rc4发布下载,正式版越来越近

距离第三个候选版发布一周时间&#xff0c;Linus Torvalds于今天宣布了Linux Kernel 4.8-rc4&#xff0c;喜欢尝鲜的用户可以下载体验了。Linus Torvalds在邮件中称&#xff0c;Linux kernel 4.8-rc4是目前为止更新幅度最小的一个RC版本了&#xff0c;这也意味着随着正式版距离…

程序员表白,不光需要“技术”,更需要勇气!

回忆起我们的点点滴滴&#xff0c;我们也有美好回忆。程序员应该如何表白呢 &#xff1f;很大一部分是不够自信&#xff0c;怕穷&#xff0c;怕拒绝&#xff0c;其实更多的你可能需要的是一份勇气&#xff0c;爱&#xff0c;要大声说出来&#xff01;恰逢官方正文&#xff0c;在…

休眠:在sqlRestriction上使用联接表别名

如果在复杂查询中使用休眠模式&#xff0c;则需要使用sql。 因此&#xff0c;sqlRestrictions可以解决。 但是&#xff0c;对联接表别名使用sql限制有点棘手。 将有三个表&#xff1a; 公司表。 员工表。 每个员工都属于一家公司&#xff0c;因此我们有多对一的关系。 福…

android 批量查找view,Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

效果图如下:recyclerview 实现多选,单选,全选,反选,批量删除的步骤1.在recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件2.这里选中的控件没有用checkbox来做,用的是imageview,选中和不选中其实是两张图片3.默认是不显示选中的控件的,点击编辑的时候显…

盘点和程序员相关的那些事,让你不再被割韭菜,薅羊毛!

如今的我们处在一个信息爆炸的时代&#xff0c;光埋头苦恼的闭门造车已经不能满足我们程序员的日常开销啦&#xff0c;因此需要密切关注和自己相关的那些事&#xff01; 目录 1.成功绝非偶然 2.你们公司几号发工资就代表你公司所处的级别 3.各大公司HR对学历的评价&#xff1…

转:fopen与open可以转换吗

绝对不可以。fopen是C运行库级别的函数&#xff0c;而open是system call的wrapper routine。fopen返回FILE *的指针&#xff0c;这个结构本身维护着一些关于这个文件的信息&#xff0c;而open返回的是这个被打开的文件的id&#xff0c;这个id是内核来维护的。这两个东西根本不是…

微信抢红包

今晚就过年了,相信很多朋友在微信群能收到很多红包,但是过年可能吃的更重要。比如我~ 那么你需要如下一款软件。 那就是让你在百忙之中,都不会错过任意一个红包,也就是微信的抢红包神器。 我也是心血一热,想找个软件代替自己领红包,于是就找了找,并且试验了一波,确实是…

diy一个android手机版下载,原神个人自制版

原神个人自制版是一款十分有意思的自由探索游戏&#xff0c;用户在这里能看到不少的游戏角色&#xff0c;你需要做的就是不断的发挥出自己的“能力”&#xff0c;让游戏中的角色全部的到达你的队伍中。当然这里还有着不少的武器&#xff0c;等着用户的不断的寻找。原神个人自制…

dart语言和java语言_Java不是文明语言吗?

dart语言和java语言几周前&#xff0c;我有机会学习iOS编程。 我的老板认为我更像是“计算机科学家”&#xff0c;而不是开发人员&#xff0c;这意味着我可以将自己的知识应用于开发一两个iPad应用程序–我要做的就是学习Objective-C&#xff0c; iOS SDK&#xff1a;到底有多难…

linux备份用户权限

1:切换root用户&#xff0c;进入home目录&#xff0c;执行以下命令: [rootlocalhost home]# ll /home/wangfajun 2: home目录下执行以下命令进行wangfajun用户的权限备份&#xff1a; [rootlocalhost home]# getfacl -R wangfajun/ >permission.bak3: 改变权限&#xff0c;并…