天天看點

(九) JanusGraph Cassandra+SpringBoot

作者:我喜歡你喜歡我的歌

因為JanusGraph中使用到了cassandra, 考慮簡單了解下cassandra。 簡單嘗試和springboot做一個簡單內建。

TABLE

CREATE TABLE master_order (
                              tenant_id text,
                              sequence_id text,
                              attachments map<text, text>,
                              booked_time timestamp,
                              columns map<text, text>,
                              create_time timestamp,
                              deleted boolean,
                              labels set<text>,
                              order_code text,
                              order_id bigint,
                              order_status int,
                              order_type int,
                              remark text,
                              update_time timestamp,
                              update_user text,
                              PRIMARY KEY (tenant_id, sequence_id)
) WITH CLUSTERING ORDER BY (sequence_id DESC);

           

應用

YML

spring:
  data:
    cassandra:
      cluster-name: datacenter1
      keyspace-name: my_test
      contact-points: 127.0.0.1
      port: 9042
      username:
      password:           

Config

package org.example;

import com.datastax.driver.core.AuthProvider;
import com.datastax.driver.core.PlainTextAuthProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;

/**
 * TODO
 *
 * @author zhongshengwang
 * @description TODO
 * @date 2023/4/7 22:40
 * @email 18668485565163.com
 */
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {

    @Value("${spring.data.cassandra.keyspace-name}")
    private String keyspaceName;


    @Value("${spring.data.cassandra.contact-points}")
    private String contactPoints;

    @Value("${spring.data.cassandra.port}")
    private int port;


    @Value("${spring.data.cassandra.cluster-name}")
    private String clusterName;

    @Value("${spring.data.cassandra.username}")
    private String username;

    @Value("${spring.data.cassandra.password}")
    private String password;

    @Override
    protected String getKeyspaceName() {
        return keyspaceName;
    }

    @Override
    public String getContactPoints() {
        return contactPoints;
    }

    @Override
    public int getPort() {
        return this.port;
    }

    @Override
    public String getClusterName() {
        return clusterName;
    }

    @Override
    protected boolean getMetricsEnabled() {
        return false;
    }

    @Override
    protected AuthProvider getAuthProvider() {
        return new PlainTextAuthProvider(username, password);
    }

    @Override
    public String[] getEntityBasePackages() {
        return new String[]{"org.example"};
    }

}           

DAO

package org.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * TODO
 *
 * @author zhongshengwang
 * @description TODO
 * @date 2023/4/7 22:44
 * @email 18668485565163.com
 */
@Repository
public interface MasterOrderDao extends CassandraRepository<MasterOrderDO,String> {

    /**
     * jpa這是JPA的用法 findBy後面跟實體類的屬性 可以自動查詢 不用自己實作
     * @param id
     * @param sequenceId
     * @return
     */
    List<MasterOrderDO> findByTenantIdAndSequenceId(String id, String sequenceId);

}           

DO

package org.example;

import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Tolerate;
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.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.Set;

/**
 * TODO
 *
 * @author zhongshengwang
 * @description TODO
 * @date 2023/4/7 22:42
 * @email 18668485565163.com
 */
@Data
@Builder
@ToString
@Table("master_order")
public class MasterOrderDO implements Serializable {
    private static final long serialVersionUID = -8255203043816589182L;

    @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED,value = "tenant_id")
    String tenantId;

    @PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED,value = "sequence_id")
    String sequenceId;

    @Column("attachments")
    Map<String,String> attachments;

    @Column("booked_time")
    Date bookedTime;

    @Column("columns")
    Map<String,String> columns;

    @Column("create_time")
    Date createTime;

    @Column("deleted")
    Boolean deleted;

    @Column("labels")
    Set<String> labels;

    @Column("order_code")
    String  orderCode;

    @Column("order_id")
    Long orderId;

    @Column("order_status")
    Integer orderStatus;

    @Column("order_type")
    Integer orderType;

    @Column("remark")
    String remark;

    @Column("update_time")
    Date updateTime;

    @Column("update_user")
    String updateUser;

    @Tolerate
    public MasterOrderDO(){}
}
           

Service

package org.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Service;

/**
 * TODO
 *
 * @author zhongshengwang
 * @description TODO
 * @date 2023/4/7 22:48
 * @email 18668485565163.com
 */
@Service
public class MasterOrderService {


    @Autowired
    private CassandraTemplate cassandraTemplate;

    public void delete(MasterOrderDO masterOrderDO){
        cassandraTemplate.delete(masterOrderDO);
    }

    public MasterOrderDO save(MasterOrderDO entity) {
        return cassandraTemplate.insert(entity);
    }

    public void updateMasterOrder(MasterOrderDO masterOrderDO){
        cassandraTemplate.update(masterOrderDO);
    }

    public Iterable<MasterOrderDO> findAll() {
        return cassandraTemplate.select("SELECT * FROM master_order;", MasterOrderDO.class);
    }
}
           

UnitTests

package org.example;
import java.util.Date;
import java.util.List;

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

/**
 * TODO
 *
 * @author zhongshengwang
 * @description TODO
 * @date 2023/4/7 22:48
 * @email 18668485565163.com
 */
@SpringBootTest(classes = Main.class)
@RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MasterOrderServiceTest {
    @Resource
    private MasterOrderService masterOrderService;
    @Test
    public void delete() {
        MasterOrderDO entity = new MasterOrderDO();
        entity.setTenantId("12580");
        entity.setSequenceId("1");
        masterOrderService.delete(entity);
    }

    @Test
    public void save() {
        MasterOrderDO entity = new MasterOrderDO();
        entity.setTenantId("12580");
        entity.setSequenceId("1");
        entity.setAttachments(Maps.newHashMap());
        entity.setBookedTime(new Date());
        entity.setColumns(Maps.newHashMap());
        entity.setCreateTime(new Date());
        entity.setDeleted(false);
        entity.setLabels(Sets.newHashSet());
        entity.setOrderCode("123456xxxx");
        entity.setOrderId(12345L);
        entity.setOrderStatus(0);
        entity.setOrderType(0);
        entity.setRemark("好的");
        entity.setUpdateTime(new Date());
        entity.setUpdateUser("zsw12345");
        masterOrderService.save(entity);
    }

    @Test
    public void updateMasterOrder() {
        MasterOrderDO entity = new MasterOrderDO();
        entity.setTenantId("12580");
        entity.setSequenceId("1");
        entity.setAttachments(Maps.newHashMap());
        entity.setBookedTime(new Date());
        entity.setColumns(Maps.newHashMap());
        entity.setCreateTime(new Date());
        entity.setDeleted(false);
        entity.setLabels(Sets.newHashSet());
        entity.setOrderCode("1234567xxxx");
        entity.setOrderId(12345L);
        entity.setOrderStatus(0);
        entity.setOrderType(0);
        entity.setRemark("好的1");
        entity.setUpdateTime(new Date());
        entity.setUpdateUser("zsw12345");
        masterOrderService.updateMasterOrder(entity);
    }

    @Test
    public void findAll() {
        List<MasterOrderDO> all = masterOrderService.findAll();
        for (MasterOrderDO masterOrderDO : all) {
            System.out.println(masterOrderDO.toString());
        }
    }
}           

運作完成檢視效果:

使用idea專業版連接配接cassandra可以可視化檢視cassandra中的資料:

(九) JanusGraph Cassandra+SpringBoot