在这篇文章中,我们将使用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

使用Apache Cassandra设置一个SpringData项目相关推荐

  1. Qt Creator设置一个Autotools项目

    Qt Creator设置一个Autotools项目 设置一个Autotools项目 设置一个Autotools项目 AutotoolsProjectManager是用于自动工具支持的插件.默认情况下它 ...

  2. 使用Apache Cassandra设置SpringData项目

    在这篇文章中,我们将使用Gradle和spring boot来创建一个集成spring-mvc和Apache Cassandra数据库的项目. 首先,我们将从Gradle配置开始 group 'com ...

  3. Apache Cassandra 在 Facebook 的应用

    谁说 Facebook 弃用 Cassandra?相反 Facebook 拥有全世界最大的单个 Cassandra 集群部署,而且他们对 Cassandra 做了很多性能优化,包括 Cassandra ...

  4. Apache Cassandra简介

    Apache Cassandra 是一个开源的.分布式.无中心.弹性可扩展.高可用.容错.一致性可调.面向行的数据库,它基于 Amazon Dynamo 的分布式设计和 Google Bigtable ...

  5. Visual Stdio 无法直接启动带有“类库输出类型”的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!

    Visual Stdio 无法直接启动带有"类库输出类型"的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目.将这个可执行项目设置为启动项目! 参考文章: (1) ...

  6. python爬虫网络中断_python爬虫项目设置一个中断重连的程序的实现

    做爬虫项目时,我们需要考虑一个爬虫在爬取时会遇到各种情况(网站验证,ip封禁),导致爬虫程序中断,这时我们已经爬取过一些数据,再次爬取时这些数据就可以忽略,所以我们需要在爬虫项目中设置一个中断重连的功 ...

  7. 【转载】Apache如何设置访问一个目录需要密码

    很详细 收藏以后用 原文地址:Apache如何设置访问一个目录需要密码作者:梦终 如何设置访问一个目录需要密码呢?其实在Apache服务器中非常简单.默认情况下,可以在某个目录下放一个.htacces ...

  8. html 创建一个正方形,css 如何设置带有正方形项目的列表

    css设置带有正方形项目的列表的方法:首先创建一个HTML示例文件:然后使用ul无序列表标签,并指定"list-style-type"为"square"即可设置 ...

  9. 对话 Apache 巨咖 - 如何做好一个开源项目?

    编辑|常郁松 责编|王福政 前言 这是一篇两年半前的活动记录,应该最早的一批Apache 项目 Committer 参加的 Meetup,在这次会上跟大家分享了很多 Apache 项目孵化的相关的经验 ...

最新文章

  1. 【组队学习】【29期】2. 计算机视觉
  2. 厉害!重庆参加马拉松赛人数7年翻10倍,今年区县马拉松赛事将大增
  3. 二调建设用地地类代码_二调土地地类代码表
  4. php代码实现做网络安全的功能,基于PHP关键词审计技巧?网络安全源代码审计
  5. Java线程池的拒绝策略
  6. Java 8的烹调方式–拼图项目
  7. 简单易用的MongoDB
  8. jquery中的 $(function(){})
  9. 日常问题——Mac下新建目录报Read-only file system
  10. 计划任务文件 linux,Linux之任务计划
  11. 苏宁MOCK测试桩服务建设实践
  12. java事件监听机制pdf,事件监听机制(转)
  13. 后起之秀,《你好,李焕英》,票房已过十个亿和唐探三哪个好?
  14. PHP面向对象构造函数,析构函数
  15. 在线文档有哪些技术难点
  16. matlab数控加工,关于MATLAB复杂型面数控加工编程.pdf
  17. net use \\192.168.54.145 /user:administrator 12345qwert无法连接,错误码1326
  18. 第三代酷睿i3处理器_轻薄本CPU谁更强?英特尔21款低功耗处理器大排行!
  19. 卸载正在使用中的tcp_congestion_control模块
  20. 查询MAC地址和接口的对应关系

热门文章

  1. layui上传图片,前端直接拷代码,后端……
  2. myeclipse如何换一个漂亮的主题
  3. javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
  4. 154. 寻找旋转排序数组中的最小值 II(有手就行)
  5. SpringMVC(笔记)
  6. hibernate的lazy的使用
  7. spring(6) 渲染web视图
  8. DFS应用——找出无向图的割点
  9. eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络
  10. lombok 自动使用_Lombok,自动值和不可变项