Springboot集成HBase使用案例

这篇具有很好参考价值的文章主要介绍了Springboot集成HBase使用案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、HBase部署安装

1.HBase下载地址:Apache HBase – Apache HBase Downloads

Springboot集成HBase使用案例

2.解压启动(进入压缩包bin目录),本次演示的是macOS系统启动演示(windows系统启动命令:./start-hbase.cmd)

./start-hbase.sh

Springboot集成HBase使用案例

Springboot集成HBase使用案例

 

3. 浏览器访问http://IP:16010/master-status出现如下页面表示启动成功

 Springboot集成HBase使用案例

 4.HBase控制台操作

4.1进入控制台:

1. 进入HBase安装包的bin目录
2. ./hbase shell

Springboot集成HBase使用案例

4.2.Hbase控制台常用命令总结如下

1.进入hbase shell命令行: ./hbase shell  (bin目录下执行)
2.扫描全表全部数据: scan '表名'
3.查看连接的用户: whomi
4.创建表: create ‘表名’,’列族名1’,’列族名2’
5.查看数据库中全部的表: list
6.describe查看表结构: describe '表名'
7.删除表: drop '表名'
8.插入数据: put ‘表名’,’列族名1:列名1’,’值’
9.get获取数据: get '表名',行,列族,列
10.count计算表的行数: count '表名'
11.删除整行数据: deleteall '表名','行号' 
12.删除全表数据: truncate '表名'

 4.3.HBase表结构以及参数说明

/**
 * @param tableName    表名
 * @param rowKey       行主键
 * @param columnFamily 列族
 * @param column       列名
 * @param value        列值
 */

Springboot集成HBase使用案例

 5.代码如下

5.1.maven依赖(本项目引用的Springboot版本是2.5.6)

 <dependency>
     <groupId>org.apache.hbase</groupId>
     <artifactId>hbase-client</artifactId>
     <version>2.2.3</version>
 </dependency>
  <!--添加Swagger3依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!--knife4j(接口文档)-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.2.3</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>

        <!-- hutool工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.2</version>
        </dependency>

yml配置


server:
  port: 8081
#swagger文档开启/关闭
springfox:
  documentation:
    auto-startup: true
#knife4j
knife4j:
  production: false # 开启/屏蔽文档资源

#HBase
hbase:
  config:
    hbase:
      zookeeper:
        property:
          clientPort: 2181
        quorum: 127.0.0.1

5.2基础配置

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

import java.io.IOException;
import java.util.Map;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 09:54
 * @description:
 * @version: V1.1
 */
@EnableConfigurationProperties(HbaseProperties.class)
@org.springframework.context.annotation.Configuration
public class HbaseConfig {
    private final HbaseProperties prop;

    public HbaseConfig(HbaseProperties properties) {
        this.prop = properties;
    }

    @Bean
    public Configuration configuration() {
        Configuration configuration = HBaseConfiguration.create();
        Map<String, String> config = prop.getConfig();
        config.forEach(configuration::set);
        return configuration;
    }

    @Bean
    public Connection getConnection() throws IOException {
        return ConnectionFactory.createConnection(configuration());
    }
}
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Map;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 09:52
 * @description:
 * @version: V1.1
 */
@ConfigurationProperties(prefix = "hbase")
public class HbaseProperties {
    private Map<String, String> config;

    public Map<String, String> getConfig() {
        return config;
    }

    public void setConfig(Map<String, String> config) {
        this.config = config;
    }
}

swagger配置

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
 * @author :jerry
 * @date :Created in 2022/5/28 10:30
 * @description:
 * @version: V1.1
 *  *Swagger3API文档的配置
 *  knife4j文档地址(端口号根据自己项目配置): http://localhost:8081/doc.html#
 *  swagger文档地址(端口号根据自己项目配置):http://localhost:8081/swagger-ui/index.html#/
 */
@Configuration
@EnableOpenApi
@EnableKnife4j
public class Swagger3Config {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
//                .groupName("webApi")
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cetc.controller"))
                .paths(PathSelectors.any())
                .build();
    }


    @Bean
    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SwaggerUI接口文档")
                .description("接口文档Swagger-Bootstrap版")
                .termsOfServiceUrl("http://localhost:8081/swagger-ui/index.html#/")
                .contact(new Contact("jerry","http://localhost:8081/doc.html#", "13258239832@163.com"))
                .version("1.0")
                .license("jerry")
                .build();
    }
}

5.3.控制层代码

import com.cetc.dto.HBaseDto;
import com.cetc.service.HbaseService;
import com.cetc.util.CommonResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 10:39
 * @description:
 * @version: V1.1
 */
@Api(tags = "habse接口测试")
@RestController
@RequestMapping("/hbase")
public class HbaseController {
    @Autowired
    private HbaseService hbaseService;

    /**
     * 创建表
     * tableName:表名
     * columnFamilies:列族
     */
    @ApiOperation(value = "创建表")
    @GetMapping("/createTable")
    public CommonResultVo createTable(String tableName, String[] columnFamilies) throws IOException {
        return hbaseService.createTable(tableName, columnFamilies);
    }

    @ApiOperation(value = "新增/修改")
    @PostMapping("/saveOrUpdate")
    public CommonResultVo saveOrUpdate(@RequestBody List<HBaseDto> list) throws IOException {
        for (HBaseDto hBaseDto : list) {
            hbaseService.saveOrUpdate(hBaseDto);
        }
        return CommonResultVo.success();
    }

    @ApiOperation(value = "删除表/行/列族/列")
    @PostMapping("/deleteTable")
    public CommonResultVo deleteTable(@RequestBody HBaseDto hBaseDto) throws IOException {
        return hbaseService.deleteTable(hBaseDto);
    }


//    @ApiOperation(value = "判断表是否已经存在")
//    @GetMapping("/tableExists")
//    public CommonResultVo tableExists(String tableName) throws IOException {
//        boolean flag = hbaseService.tableExists(tableName);
//        return CommonResultVo.success(flag);
//    }

    @ApiOperation(value = "高级条件查询")
    @PostMapping("/scanRowData")
    public CommonResultVo scanRowData(@RequestBody HBaseDto hBaseDto) throws IOException {
        return hbaseService.scanRowData(hBaseDto);
    }

    @ApiOperation(value = "分页查询")
    @PostMapping("/scanPageRow")
    public CommonResultVo scanPageRow(@RequestBody HBaseDto hBaseDto) throws IOException {
        return hbaseService.scanPageRow(hBaseDto);
    }
//
//    @ApiOperation(value = "总行数")
//    @PostMapping("/countRow")
//    public CommonResultVo countRow(@RequestBody HBaseDto hBaseDto) throws IOException {
//        return CommonResultVo.success(hbaseService.countRow(hBaseDto));
//    }


}

5.4数据逻辑层代码

import com.cetc.dto.HBaseDto;
import com.cetc.util.CommonResultVo;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 10:01
 * @description:
 * @version: V1.1
 */
public interface HbaseService {

    //创建表
    CommonResultVo createTable(String tableName, String... columnFamilies) throws IOException;

    void saveOrUpdate(HBaseDto hBaseDto) throws IOException;

    CommonResultVo deleteTable(HBaseDto hBaseDto) throws IOException;

    //判断表是否已经存在,这里使用间接的方式来实现
    boolean tableExists(String tableName) throws IOException;

    CommonResultVo scanRowData(HBaseDto hBaseDto) throws IOException;

    CommonResultVo scanPageRow(HBaseDto hBaseDto) throws IOException;

    long countRow(HBaseDto hBaseDto) throws IOException;

}
import com.cetc.config.HbaseConfig;
import com.cetc.dto.HBaseDto;
import com.cetc.service.HbaseService;
import com.cetc.util.CommonResultVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.*;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 09:58
 * @description:
 * @version: V1.1
 */
@Service
@Slf4j
public class HbaseServiceImpl implements HbaseService {
    @Autowired
    private HbaseConfig config;

    private static Connection connection = null;
    private static Admin admin = null;

    @PostConstruct
    private void init() {
        if (connection != null) {
            return;
        }
        try {
            connection = ConnectionFactory.createConnection(config.configuration());
            admin = connection.getAdmin();
        } catch (IOException e) {
            log.error("HBase create connection failed:", e);
        }
    }

    /**
     * 根据表名/列族创建表
     *
     * @param tableName      表名
     * @param columnFamilies 列族名
     * @throws IOException 异常
     */
    @Override
    public CommonResultVo createTable(String tableName, String... columnFamilies) throws IOException {
        try {
            TableName name = TableName.valueOf(tableName);
            boolean isExists = this.tableExists(tableName);
            if (isExists) {
                throw new TableExistsException(tableName + "is exists!");
            }
            TableDescriptorBuilder descriptorBuilder = TableDescriptorBuilder.newBuilder(name);
            List<ColumnFamilyDescriptor> columnFamilyList = new ArrayList<>();
            for (String columnFamily : columnFamilies) {
                ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder
                        .newBuilder(columnFamily.getBytes()).build();
                columnFamilyList.add(columnFamilyDescriptor);
            }
            descriptorBuilder.setColumnFamilies(columnFamilyList);
            TableDescriptor tableDescriptor = descriptorBuilder.build();
            admin.createTable(tableDescriptor);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return CommonResultVo.success();
    }


    /**
     * 保存修改
     */
    @Override
    public void saveOrUpdate(HBaseDto dto) throws IOException {
        String tableName = dto.getTableName();  //表名
        String rowKey = dto.getRow();       //行主键
        String columnFamily = dto.getColumnFamily();        //列族
        String columns = dto.getColumn();        //列
        String value = dto.getValue();
        Long msgtimeUtime = dto.getMsgtimeUtime();

        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(Bytes.toBytes(rowKey));
        put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columns), Bytes.toBytes(value));
        //设置时间戳
        put.setTimestamp(msgtimeUtime != null ? msgtimeUtime : System.currentTimeMillis());
        table.put(put);
    }


    /**
     * 删除
     * tableName    表名
     * rowKey       行主键
     * columnFamily 列族
     * column       列
     */
    @Override
    public CommonResultVo deleteTable(HBaseDto hBaseDto) throws IOException {
        boolean isExists = this.tableExists(hBaseDto.getTableName());
        if (!isExists) {
            return CommonResultVo.failed("表" + hBaseDto.getTableName() + "不存在");
        }
        String tableName = hBaseDto.getTableName();
        Table table = connection.getTable(TableName.valueOf(tableName));


        //删除列
        String columnFamily = hBaseDto.getColumnFamily();   //列族
        String row = hBaseDto.getRow();     //行主键
        String column = hBaseDto.getColumn();       //列
        if (StringUtils.isNotBlank(column) && StringUtils.isNotBlank(row)
                && StringUtils.isNotBlank(columnFamily) && StringUtils.isNotBlank(column)) {
            Delete delete = new Delete(row.getBytes());
            delete.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));
            table.delete(delete);
            return CommonResultVo.success("列:" + column + "删除成功");
        }

        //删除列族
        if (StringUtils.isNotBlank(columnFamily) && StringUtils.isNotBlank(row)) {
            Delete delete = new Delete(row.getBytes());
            delete.addFamily(Bytes.toBytes(columnFamily));
            table.delete(delete);
            return CommonResultVo.success("列族:" + columnFamily + "删除成功");
        }

        //删除行主键
        if (StringUtils.isNotBlank(row)) {
            Delete delete = new Delete(row.getBytes());
            table.delete(delete);
        }

        //删除表
        if (StringUtils.isNotBlank(hBaseDto.getTableName())) {
            TableName name = TableName.valueOf(hBaseDto.getTableName());
            admin.disableTable(name);
            admin.deleteTable(name);
            return CommonResultVo.success("表:" + tableName + "删除成功");
        }

        return CommonResultVo.success();
    }

    /**
     * 判断表是否已经存在,这里使用间接的方式来实现
     *
     * @param tableName 表名
     * @return 真or假
     * @throws IOException 异常
     */
    @Override
    public boolean tableExists(String tableName) throws IOException {
        TableName[] tableNames = admin.listTableNames();
        if (tableNames != null && tableNames.length > 0) {
            for (int i = 0; i < tableNames.length; i++) {
                if (tableName.equals(tableNames[i].getNameAsString())) {
                    return true;
                }
            }
        }
        return false;
    }


    /**
     * 扫描指定列在指定行键范围的值
     */
    public CommonResultVo scanRowData(HBaseDto hBaseDto) throws IOException {
        List<Map<String, Object>> lis = new ArrayList<>();

        if (StringUtils.isBlank(hBaseDto.getTableName())) {
            CommonResultVo.failed("表名不能为null");
        }
        boolean flagStu = this.tableExists(hBaseDto.getTableName());
        if (!flagStu) {
            CommonResultVo.failed("表" + hBaseDto.getTableName() + "不存在");
        }
        Table table = connection.getTable(TableName.valueOf(hBaseDto.getTableName()));
        //指定起始行键和结束行键
        Scan scan = new Scan();
        //根据列族查询
        if (StringUtils.isNotBlank(hBaseDto.getColumnFamily())) {
            scan.addFamily(Bytes.toBytes(hBaseDto.getColumnFamily()));
        }
        //起始or结束行
        if (StringUtils.isNotBlank(hBaseDto.getStartRow()) || StringUtils.isNotBlank(hBaseDto.getStopRow())) {
            new Scan(Bytes.toBytes(hBaseDto.getStartRow()), Bytes.toBytes(hBaseDto.getStopRow()));
        }
        //指定行
        if (StringUtils.isNotBlank(hBaseDto.getRow())) {
            RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new SubstringComparator(hBaseDto.getRow()));
            scan.setFilter(rowFilter);
        }
        //扫描指定的列
        if (StringUtils.isNotBlank(hBaseDto.getColumn())) {
            scan.addColumn(Bytes.toBytes(hBaseDto.getColumnFamily()), Bytes.toBytes(hBaseDto.getColumn()));
        }

        //时间戳精确查询
        if (!Objects.isNull(hBaseDto.getMsgtimeUtime())) {
            scan.setTimestamp(hBaseDto.getMsgtimeUtime());
        }

        //时间戳区间查询
        if ((!Objects.isNull(hBaseDto.getStartTime())) && (!Objects.isNull(hBaseDto.getEndTime()))) {
            scan.setTimeRange(hBaseDto.getStartTime(), hBaseDto.getEndTime());
        }
        ResultScanner resultScanner = table.getScanner(scan);

        for (Result result : resultScanner) {

            Map<String, Object> map = new HashMap<>();
            String flag = "0";
            for (Cell cell : result.rawCells()) {
                String rowVal = Bytes.toString(CellUtil.cloneRow(cell));
                if (!flag.equals(rowVal)) {
                    map = new HashMap<>();
                }
                flag = rowVal;
                String columns = Bytes.toString(CellUtil.cloneQualifier(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                map.put(columns, value);
                map.put("row", rowVal);
                if (flag.equals(rowVal)) {
                    lis.remove(map);
                }
                lis.add(map);
//                System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) +
//                        ", 列簇:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
//                        ", 列:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
//                        ", 值:" + Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
        return CommonResultVo.success(lis);
    }

    /**
     * 分页查询
     */
    @Override
    public CommonResultVo scanPageRow(HBaseDto hBaseDto) throws IOException {


        List<Map<String, Object>> lis = new ArrayList<>();

        if (StringUtils.isBlank(hBaseDto.getTableName())) {
            CommonResultVo.failed("表名不能为null");
        }
        boolean flagStu = this.tableExists(hBaseDto.getTableName());
        if (!flagStu) {
            CommonResultVo.failed("表" + hBaseDto.getTableName() + "不存在");
        }
        Table table = connection.getTable(TableName.valueOf(hBaseDto.getTableName()));
        //指定起始行键和结束行键
        Scan scan = new Scan();
        //根据列族查询
        if (StringUtils.isNotBlank(hBaseDto.getColumnFamily())) {
            scan.addFamily(Bytes.toBytes(hBaseDto.getColumnFamily()));
        }
        //起始or结束行
        if (StringUtils.isNotBlank(hBaseDto.getStartRow()) || StringUtils.isNotBlank(hBaseDto.getStopRow())) {
            new Scan(Bytes.toBytes(hBaseDto.getStartRow()), Bytes.toBytes(hBaseDto.getStopRow()));
        }
        //指定行
        if (StringUtils.isNotBlank(hBaseDto.getRow())) {
            RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new SubstringComparator(hBaseDto.getRow()));
            scan.setFilter(rowFilter);
        }
        //扫描指定的列
        if (StringUtils.isNotBlank(hBaseDto.getColumn())) {
            scan.addColumn(Bytes.toBytes(hBaseDto.getColumnFamily()), Bytes.toBytes(hBaseDto.getColumn()));
        }

        //时间戳精确查询
        if (!Objects.isNull(hBaseDto.getMsgtimeUtime())) {
            scan.setTimestamp(hBaseDto.getMsgtimeUtime());
        }

        //时间戳区间查询
        if ((!Objects.isNull(hBaseDto.getStartTime())) && (!Objects.isNull(hBaseDto.getEndTime()))) {
            scan.setTimeRange(hBaseDto.getStartTime(), hBaseDto.getEndTime());
        }

        //current 当前页     pageSize:条数
        scan.setCaching(hBaseDto.getPageSize() * hBaseDto.getCurrent() > 6000 ? 6000 : hBaseDto.getPageSize() * hBaseDto.getCurrent());


        ResultScanner resultScanner = table.getScanner(scan);
        Result[] results;
        int pageCount = 0;
        while ((results = resultScanner.next(hBaseDto.getPageSize())).length != 0) {
            pageCount++;
            if (pageCount < hBaseDto.getCurrent()) {
                continue;
            }
            for (Result rs : results) {
                //在此处解析获取数据
//                alls.add(rs);
                Map<String, Object> map = new HashMap<>();
                String flag = "0";
                for (Cell cell : rs.rawCells()) {
                    String rowVal = Bytes.toString(CellUtil.cloneRow(cell));
                    if (!flag.equals(rowVal)) {
                        map = new HashMap<>();
                    }
                    flag = rowVal;
                    String columns = Bytes.toString(CellUtil.cloneQualifier(cell));
                    String value = Bytes.toString(CellUtil.cloneValue(cell));
                    map.put(columns, value);
                    map.put("row", rowVal);
                    if (flag.equals(rowVal)) {
                        lis.remove(map);
                    }
                    lis.add(map);
//                System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) +
//                        ", 列簇:" + Bytes.toString(CellUtil.cloneFamily(cell)) +
//                        ", 列:" + Bytes.toString(CellUtil.cloneQualifier(cell)) +
//                        ", 值:" + Bytes.toString(CellUtil.cloneValue(cell)));
                }
            }
            break;
        }
        return CommonResultVo.success(lis);
    }

    /**
     * 获取HBase的总行数
     */
    @Override
    public long countRow(HBaseDto hBaseDto) throws IOException {

        Table table = connection.getTable(TableName.valueOf(hBaseDto.getTableName()));
        Scan scan = new Scan();
        scan.setCaching(20);
        scan.addFamily(Bytes.toBytes(hBaseDto.getColumnFamily()));
        ResultScanner scanner = table.getScanner(scan);
        long rowCount = 0;

        Result[] results;
        while ((results = scanner.next(hBaseDto.getPageSize())).length != 0) {
            rowCount+=results.length;
        }
        return rowCount;
    }

}

5.5.封装的实体对象

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @author :jerry
 * @date :Created in 2022/11/7 15:50
 * @description:结果集封装
 * @version: V1.1
 */
@Data
public class HBaseDto {
    /**
     * @param tableName    表名
     * @param rowKey       行主键
     * @param columnFamily 列族
     * @param column       列
     * @param value        值
     * @throws
     */
    @ApiModelProperty("行")
    private String row;

    @ApiModelProperty("列族")
    private String columnFamily;

    @ApiModelProperty("列")
    private String column;

    @ApiModelProperty("列值")
    private String value;

    @ApiModelProperty("表名")
    private String tableName;

    @ApiModelProperty("开始行")
    private String startRow;

    @ApiModelProperty("结束行")
    private String stopRow;

    @ApiModelProperty("报文时间")
    private Long msgtimeUtime;

    @ApiModelProperty("开始时间")
    private Long startTime;

    @ApiModelProperty("结束时间")
    private Long endTime;

    @ApiModelProperty("页码")
    private Integer current;

    @ApiModelProperty("条数")
    private Integer pageSize;
}

5.6.工具类:

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

/**
 * @author dudycoco
 * @version 1.0.0
 * @ClassName CommonResultVo.java
 * @Description 结果返回公共类
 * @createTime 2022年09月19日 00:16
 */
@Getter
@Setter
@Builder
public class CommonResultVo<T> {

    private int code;
    private String message;
    private T data;

    protected CommonResultVo() {
    }

    protected CommonResultVo(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 成功返回结果
     *
     */
    public static <T> CommonResultVo<T> success() {
        return new CommonResultVo<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     */
    public static <T> CommonResultVo<T> success(T data) {
        return new CommonResultVo<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     * @param  message 提示信息
     */
    public static <T> CommonResultVo<T> success(T data, String message) {
        return new CommonResultVo<T>(ResultCode.SUCCESS.getCode(), message, data);
    }

    /**
     * 失败返回结果
     * @param resultCode 错误码
     */
    public static <T> CommonResultVo<T> failed(ResultCode resultCode) {
        return new CommonResultVo<T>(resultCode.getCode(), resultCode.getMessage(), null);
    }

    /**
     * 失败返回结果
     * @param resultCode 错误码
     * @param message 错误信息
     */
    public static <T> CommonResultVo<T> failed(ResultCode resultCode, String message) {
        return new CommonResultVo<T>(resultCode.getCode(), message, null);
    }

    /**
     * 失败返回结果
     * @param message 提示信息
     */
    public static <T> CommonResultVo<T> failed(String message) {
        return new CommonResultVo<T>(ResultCode.FAILED.getCode(), message, null);
    }

    /**
     * 失败返回结果
     */
    public static <T> CommonResultVo<T> failed() {
        return failed(ResultCode.FAILED);
    }
}

import lombok.Getter;
import lombok.Setter;

/**
 * @author dudycoco
 * @version 1.0.0
 * @ClassName ResultCode.java
 * @Description 返回值code
 * @createTime 2022年09月19日 00:22
 */

public enum ResultCode {
    SUCCESS(0, "操作成功"),
    FAILED(-1, "操作失败"),
    VALIDATE_FAILED(404, "参数检验失败"),
    UNAUTHORIZED(401, "暂未登录或token已经过期"),
    FORBIDDEN(403, "没有相关权限");

    @Setter
    @Getter
    private int code;

    @Setter
    @Getter
    private String message;

    private ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }


}

更多HBase知识点可以查看:Hbase 入门详解_Se7en_InfoQ写作社区文章来源地址https://www.toymoban.com/news/detail-415716.html

到了这里,关于Springboot集成HBase使用案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hbase安装部署

    在介绍hbase 原理和使用之前,先给大家介绍一下hbase的安装部署。 预计下期2022-10 给大家出关于hbase的原理和命令以及与其他组件的集成应用(重点) 1、下载解压 下载hbase-x.x.x安装包 解压 tar -zxvf hbase-x.x.x -C/解压到哪 2、配置【已经备份在笔记:~/资料/配置/hbase下,直接复制修改

    2023年04月21日
    浏览(35)
  • SpringBoot与文档excel,pdf集成案例分享

    Excel一款电子表格软件。直观的界面、出色的计算功能和图表工具,在系统开发中,经常用来把数据转存到Excel文件,或者Excel数据导入系统中,这就涉及数据转换问题。 PDF是可移植文档格式,是一种电子文件格式,具有许多其他电子文档格式无法相比的优点。PDF文件格式可以

    2024年02月16日
    浏览(40)
  • SpringBoot集成Lettuce连接Redis方法和案例

    说明: SpringBoot从2.0起默认使用lettuce客户端进行连接。 此次使用的版本:springboot:2.6.6,lettuce:6.1.8。 Springboot+Lettuce 单连方式 连接Redis单机/主备/Proxy集群示例。 1、在application.properties配置文件中加上redis相关配置。  2、Redis配置类RedisConfiguration。 3、Redis操作类RedisUtil。 4、

    2024年02月08日
    浏览(41)
  • 持续集成部署-k8s-数据持久化-NFS安装与使用

    网络文件系统(Network File System, NFS),是基于内核的文件系统,nfs主要是通过网络实现服务器和客户端之间的数据传输,采用远程过程调用RPC(Romete Procedure Call)机制,让不同的机器节点共享文件目录。只需将nfs服务器共享的文件目录挂载到nfs客户端,这样客户端就可以对远程

    2024年02月07日
    浏览(38)
  • Hbase下载与安装部署(一)- 独立式

    该部署方式一般用来测试,不上生产环境 HBase运行在Java虚拟机上,因此我们需要先在服务器上安装JDK 需要注意的是,HBase与JDK有可能存在版本兼容问题,所以在安装前需要选择兼容的版本 我这里选择的是JDK8和HBase2.4 JDK下载 官网 https://www.oracle.com/java/technologies/downloads/#java8 不

    2024年02月05日
    浏览(32)
  • 【hadoop】hbase的安装部署以及相关操作(图文详解)

    ​ HBase是一种基于列存储的分布式数据库系统,它能够快速地存储和处理大规模数据。与传统的关系型数据库不同,HBase采用了分布式的架构,能够实现数据的高可靠性、高可扩展性和高性能。在实际应用中,正确地安装和部署HBase集群是非常重要的。 在安装hbase之前,需要虚

    2024年02月04日
    浏览(42)
  • SpringBoot使用Hbase

    这里没有使用懒加载模式,减少启动后第一次访问时访问时间过长 init()方法实现在初始化连接池的时候创建默认数值的连接。 操作类接口 HbaseService.java 接口实现类 HbaseServiceImpl.java ok,现在就可以操作使用了。 以前都是在非Spring环境下使用Hbase的,一开始会出现:当服务使用

    2024年02月16日
    浏览(28)
  • HBase在大数据集群的安装部署及整合Phoenix

    前提:需要保证三台虚拟机hadoop102-104已经部署好基本配置。未完成的可以参考:https://blog.csdn.net/weixin_73195042/article/details/135886619 上传HBase安装包到/opt/software文件夹内 配置环境变量 在末尾添加 使用 source 让配置的环境变量生效 将环境变量分发到其他虚拟机上,并且也要sour

    2024年04月27日
    浏览(43)
  • 【超详细】springboot + springdoc-openapi + knife4j 集成案例

    springdoc-openapijava库有助于使用 spring boot 项目自动生成 API 文档。 springdoc-openapi通过在运行时检查应用程序以根据 spring 配置、类结构和各种注释推断 API 语义来工作。 自动生成 JSON/YAML 和 HTML 格式 API 的文档。可以使用 swagger-api 注释通过注释来完成此文档。 该库支持: OpenAP

    2023年04月25日
    浏览(49)
  • HBase【部署 01】CentOS 7.5 部署 hbase-2.4.5 单机版standalone模式(详细安装+配置+增删改查测试脚本)(附开源镜像站地址)

    HBase的 官网 内容还是挺多的,下载安装包还是使用 清华大学开源软件镜像站 会快一些 ⚡️ 本文的安装文件为:hbase-2.4.5-bin.tar.gz HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。运行时不仅需要 Hadoop 还依赖 JDK 环境,HBase 2.0+ 以上版本不再支持 JDK 1.7 ,需

    2024年04月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包