springboot整合Cassandra集群使用文档

集群搭建:

1、 准备三台centos7系统的服务器(测试用的虚拟机跑三个系统),IP如下:
192.168.213.128
192.168.213.129
192.168.213.130
2、 准备java环境:

3、 防火墙开放9042端口:
开启防火墙 :

systemctl start firewalld

开放9042端口:

firewall-cmd --zone=public --add-port=9042/tcp –permanent

重启防火墙:

firewall-cmd --reload

4、 下载并安装Cassandra:

cd /home/tingmen/apps/
wget https://mirrors.bfsu.edu.cn/apache/cassandra/3.0.21/apache-cassandra-3.0.21-bin.tar.gz
tar -zxf apache-cassandra-3.0.21-bin.tar.gz
mv apache-cassandra-3.0.21-bin cassandra

5、 创建数据存放文件夹:
在/home/tingmen/data/casssandra目录分别创建以下三个文件夹
commitlog
data
saved_caches
6、 修改配置文件:
对每个节点的配置文件进行修改:

vim /home/tingmen/apps/cassandra/conf/cassandra.yaml
cluster_name: ‘cz001’
data_file_directories:
- /home/tingmen/data/cassandra/data
commitlog_directory: /home/tingmen/data/cassandra/commitlog
saved_caches_directory: /home/tingmen/data/cassandra/saved_caches
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "192.168.213.128,192.168.213.129,192.168.213.130" # 修改为集群中可以被发现的机器,多写几个,用逗号隔开
listen_address: 192.168.213.128 # 本机地址
rpc_address: 192.168.213.128 # 本机地址
endpoint_snitch: GossipingPropertyFileSnitch  # 表示使用 cassandra-rackdc.properties 文件中的配置

修改cassandra-rackdc.properties

vim  /home/tingmen/apps/cassandra/conf/cassandra-rackdc.properties
dc=dc1 # datacenter名,同一个数据中心的用一个名字
rack=rack1 # 不同节点不同,第二个节点为rack2,以此类推......

7、 依次启动Cassandra:

cd /home/tingmen/apps/cassandra/bin/
./cassandra
./nodetool status #可查看节点状态

设计表结构:

DROP KEYSPACE if exists czenv;
CREATE KEYSPACE czenv
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
use czenv;
drop table if exists temperature  ;
CREATE TABLE temperature (
    weatherstation_ip text,
    event_time timestamp,
    value double,
    PRIMARY KEY (weatherstation_ip,event_time) );

温度传感器的ip和时间戳为联合主键。

Springboot项目集成:

1、 新建一个spring boot项目, pom.xml中关于Cassandra的依赖如下:

<dependency>
		<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
 </dependency>

配置文件中关于Cassandra部分:

spring:
  data:
    cassandra:
      keyspace-name: czenv
      #entity-base-packages:
      contact-points: 192.168.213.128,192.168.213.129,192.168.213.130
      port: 9042
      session-name: cz001#新版本为session-name,老版本为cluster_name
      local-datacenter: dc1

2、 实体类do:

package com.zikoo.cassandraproj.entity;

import org.springframework.data.cassandra.core.cql.PrimaryKeyType;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.core.mapping.Table;

import java.sql.Timestamp;
@Table("temperature")
public class Temperature {

    @PrimaryKeyColumn(value = "weatherstation_ip",type = PrimaryKeyType.PARTITIONED)
    private String weatherstation_ip;
    @PrimaryKeyColumn(value = "event_time",type = PrimaryKeyType.CLUSTERED)
    private Timestamp event_time;
    @Column("value")
    private double value;

    public String getWeatherstation_ip() {
        return weatherstation_ip;
    }

    public void setWeatherstation_ip(String weatherstation_ip) {
        this.weatherstation_ip = weatherstation_ip;
    }

    public Timestamp getEvent_time() {
        return event_time;
    }

    public void setEvent_time(Timestamp event_time) {
        this.event_time = event_time;
    }

    public double getValue() {
        return value;
    }

    public void setValue(double temperature) {
        this.value = temperature;
    }
}

3、 实体类vo层:

package com.zikoo.cassandraproj.model;

public class Temperature extends com.zikoo.cassandraproj.entity.Temperature {
}

暂时vo类为空,留着方便之后假如其他来自页面的字段,而不必修改do。

4、 service接口:

import com.zikoo.cassandraproj.model.Temperature;

import java.util.List;

public interface EnvService {
    com.zikoo.cassandraproj.entity.Temperature save(com.zikoo.cassandraproj.entity.Temperature weather);

    List<com.zikoo.cassandraproj.entity.Temperature> query(Temperature temperature);

    boolean delete(Temperature temperature);
}

5、 service层实现类:

import com.zikoo.cassandraproj.dao.EnvService;
import com.zikoo.cassandraproj.entity.Temperature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class EnvServiceImpl implements EnvService {
    @Autowired
    private CassandraTemplate cassandraTemplate;


    @Override
    public Temperature save(Temperature temperature) {
        return cassandraTemplate.insert(temperature);
    }

    @Override
    public List<Temperature> query(com.zikoo.cassandraproj.model.Temperature temperature) {
        return cassandraTemplate.select("select * from czenv.temperature where weatherstation_ip = '"+temperature.getWeatherstation_ip()+"';", Temperature.class);
    }

    @Override
    public boolean delete(com.zikoo.cassandraproj.model.Temperature temperature) {
//        String queryStr="DELETE FROM czenv.temperature where weatherstation_ip = '" + temperature.getWeatherstation_ip() + "' and event_time = "+temperature.getEvent_time()+";";
        return cassandraTemplate.delete(Query.query(Criteria.where("weatherstation_ip").is(temperature.getWeatherstation_ip())).and(Criteria.where("event_time").lte(temperature.getEvent_time())), Temperature.class);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot整合Cassandra可以通过以下几个步骤完成: 1. 添加Cassandra依赖:在`pom.xml`文件中添加Cassandra的驱动依赖,例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency> ``` 2. 配置Cassandra连接信息:在`application.properties`文件中配置Cassandra的连接信息,例如: ```properties spring.data.cassandra.contact-points=your-cassandra-host spring.data.cassandra.port=9042 spring.data.cassandra.keyspace-name=your-keyspace-name ``` 3. 创建实体类:创建与Cassandra表对应的实体类,使用`@Table`注解指定表名,使用`@PrimaryKey`注解指定主键,例如: ```java @Table("users") public class User { @PrimaryKey("id") private UUID id; @Column("name") private String name; // getters and setters } ``` 4. 创建Repository:创建一个继承自`CassandraRepository`的接口,用于定义对Cassandra表的操作,例如: ```java @Repository public interface UserRepository extends CassandraRepository<User, UUID> { List<User> findByName(String name); } ``` 5. 使用Repository:在需要访问Cassandra数据的地方使用自动注入的Repository进行操作,例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getUsersByName(String name) { return userRepository.findByName(name); } } ``` 这样就完成了Spring BootCassandra整合。你可以根据具体的业务需求,使用Repository提供的方法进行数据操作。如果需要更复杂的查询,可以使用Cassandra的查询语言CQL来编写自定义查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值