1. 程式人生 > >自定義spring-boot-starter-hbase

自定義spring-boot-starter-hbase

專案背景

  1. 公司越來越多的專案採用spring-boot+hbase的查詢,由於公司的hbase版本為1.x的CDH版本,本身沒有spring-boot的starter,故寫出一個spring-boot-starter-hbase提供給各方專案使用。
  2. 自定義的spring-boot的hbase starter,為hbase的query和更新等操作提供簡易的api並整合spring-boot的auto configuration。

程式碼

程式碼較多,見github,參考了spring-data-hadoop中hbase的api設計

github地址

打包

修改相關的maven私服地址

gradle clean install uploadArchives

使用方式

依賴

compile "jthink:spring-boot-starter-hbase:0.0.1"

整合

在spring-boot專案的application.properties檔案中加入spring.data.hbase.quorum配置項,並賦予正確的值

使用

query

  1. 將上述配置項賦予正確的值
  2. dto定義
public class PeopleDto {

  private
String name; private int age; public String getName() { return name; } public PeopleDto setName(String name) { this.name = name; return this; } public int getAge() { return age; } public PeopleDto setAge(int age) { this.age = age; return this; } }
  1. RowMapper定義
import
com.jthink.skyeye.data.hbase.api.RowMapper; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; public class PeopleRowMapper implements RowMapper<PeopleDto> { private static byte[] COLUMNFAMILY = "f".getBytes(); private static byte[] NAME = "name".getBytes(); private static byte[] AGE = "age".getBytes(); @Override public PeopleDto mapRow(Result result, int rowNum) throws Exception { PeopleDto dto = new PeopleDto(); // TODO: 設定相關的屬性值 String name = Bytes.toString(result.getValue(COLUMNFAMILY, NAME)); int age = Bytes.toInt(result.getValue(COLUMNFAMILY, AGE)); return dto.setName(name).setAge(age); } }
  1. query操作
import com.jthink.skyeye.data.hbase.api.HbaseTemplate;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

public class QueryService {

  @Autowired
  private HbaseTemplate hbaseTemplate;

  public List<PeopleDto> query(String startRow, String stopRow) {
  Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(stopRow));
  scan.setCaching(5000);
  List<PeopleDto> dtos = this.hbaseTemplate.find("people_table", scan, new PeopleRowMapper());
  return dtos;
  }

  public PeopleDto query(String row) {
  PeopleDto dto = this.hbaseTemplate.get("people_table", row, new PeopleRowMapper());
  return dto;
  }
}

update等

  1. 將上述配置項賦予正確的值
  2. update、delete、put操作
import com.jthink.skyeye.data.hbase.api.HbaseTemplate;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Mutation;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class QueryService {

  @Autowired
  private HbaseTemplate hbaseTemplate;

  public List<PeopleDto> query(String startRow, String stopRow) {
  Scan scan = new Scan(Bytes.toBytes(startRow), Bytes.toBytes(stopRow));
  scan.setCaching(5000);
  List<PeopleDto> dtos = this.hbaseTemplate.find("people_table", scan, new PeopleRowMapper());
  return dtos;
  }

  public PeopleDto query(String row) {
  PeopleDto dto = this.hbaseTemplate.get("people_table", row, new PeopleRowMapper());
  return dto;
  }

  public void saveOrUpdates() {
  List<Mutation> puts = new ArrayList<>();
  // 設值
  this.hbaseTemplate.saveOrUpdates("people_table", puts);
  }

  public void saveOrUpdate() {
  Mutation delete = new Delete(Bytes.toBytes(""));
  this.hbaseTemplate.saveOrUpdate("people_table", delete);
  }
}

其他

不可以滿足需求的可以使用hbaseTemplate暴露出來的getConnection()方法

相關推薦

定義spring-boot-starter-hbase

專案背景 程式碼 打包 使用方式 依賴 整合 專案背景 公司越來越多的專案採用spring-boot+hbase的查詢,由於公司的hbase版本為1.x的CDH版本,本身沒有spring-boot的starter,故寫出一個sprin

定義spring boot starter三部曲之二:實戰開發

本文是《自定義spring boot starter三部曲》的第二篇,上一篇中我們通過學習spring cloud的starter,對spring boot的starter有了初步瞭解,也設計好了實戰內容,今天就來一起實現; 三部曲文章連結 《自定義spring boot

定義spring boot starter三部曲之三:原始碼分析spring.factories載入過程

本文是《自定義spring boot starter三部曲》系列的終篇,前文中我們開發了一個starter並做了驗證,發現關鍵點在於spring.factories的自動載入能力,讓應用只要依賴starter的jar包即可,今天我們來分析Spring和Spring boot原始碼,瞭解s

定義spring boot starter三部曲之一:準備工作

從本章開始,一起實戰一個自定義的spring boot starter,整個系列共三篇文章,內容如下: 準備:瞭解基本概念、規劃實戰內容; 實戰:開發自定義starter,並在demo工程中使用它; 深入:從spring和spring boot原始碼層面分析sta

最詳細的定義Spring Boot Starter開發教程

1. 前言 隨著Spring的日漸臃腫,為了簡化配置、開箱即用、快速整合,Spring Boot 橫空出世。 目前已經成為 Java 目前最火熱的框架了。平常我們用Spring Boot開發web應用。Spring mvc 預設使用tomcat servlet容器, 因為Spring mvc元件集成了spri

Spring Boot2 系列教程(六)定義 Spring Boot 中的 starter

我們使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中。Starter 為我們帶來了眾多的自動化配置,有了這些自動化配置,我們可以不費吹灰之力就能搭建一個生產級開發環境,有的小夥伴會覺得這個 Starter 好神奇呀!其實 Starter 也都是 Spring + SpringMVC

手把手教你實現定義Spring BootStarter

### 引言 上篇文章[《天天用SpringBoot,它的自動裝配原理卻說不出來》](https://mp.weixin.qq.com/s/TnofWzuaH-WDcfYVfp-UoA)我們有說`springBoot`的自動裝配怎麼實現的(建議最好先看下篇文章,因為前後有關係),這篇文章的話我們就自己來實現一

定義 spring boot 啟動圖案

首先去這個網站 傳送門,輸入想要的圖案,選擇自己喜歡的字型,會得到對於的圖案,copy 圖案。 如下圖: 圖案如下: _ __ _ __ __ U _____ u _ _ |"|/ / U /"\ u\ \ /"/u\| ___"|

攜程 Apollo 配置中心 | 學習筆記(三) 定義Spring Boot專案通過配置中心啟動專案

一、前言二、專案搭建   2.1 建立Spring Boot專案    因為專案用的是Eureka作為服務註冊與發現,因此這裡我加入了Eureka Client的依賴pom.xml檔案 <dependency> <grou

springboot定義starter(protobuf-spring-boot-starter

0.簡介(因為沒有想到合適的事例 所以就封一層protobuf) 官方命名:spring-boot-starter-{name} 比如spring-boot-starter-web 非官方命名:{name}-spring-boot-starter 比如mybatis-spring-b

對照談-官方spring-boot-starter定義starter異同分析

      在前面我講用spring-boot-starter-mail發郵件的時候,我側重看的是s

Spring Boot Starter 的基本封裝

java aop 通過 pac ket oot foundry 支持 cto 1)spring-boot-starter這是Spring Boot的核心啟動器,包含了自動配置、日誌和YAML。 2)spring-boot-starter-amqp通過spring-rabbi

定義spring定時器

() spl public == integer service upd imei second package com.wjz.quartz; import java.util.concurrent.Executors; public class QuartzDem

spring-boot-starter-actuator(健康監控)配置和使用

frame maven git 追蹤 包括 屬性 per dump zookeepe 在生產環境中,需要實時或定期監控服務的可用性。Spring Boot的actuator(健康監控)功能提供了很多監控所需的接口,可以對應用系統進行配置查看、相關功能統計等。 集成:

spring-boot-starter-thymeleaf對沒有結束符的HTML5標簽解析出錯

pro 標記 end 解析 沒有 開啟 span htm spa springboot 在使用thymeleaf 作為模板時,當出現未關閉標簽時,如下所示代碼,標簽沒有關閉。 <link href="plugin/layui/css/layui.css" rel="

Spring boot集成spring-boot-starter-data-jpa環境搭建

lis ESS hiberna 構建 TP xtend 默認 location col 1、創建Spring boot項目 2、保存等待構建完成 3、增加spring-boot-starter-data-jpa、內存數據庫依賴包hsqldb

定義spring參數註解 - 打破@RequestBody單體限制

hand 動態 except builder 替換 true delattr actor 對象 本文主要描述怎樣自定義類似@RequestBody這樣的參數註解來打破@RequestBody的單體限制。 目錄1 @RequestBody的單體限制2 自定義spring的

springboot2.0+dubbo-spring-boot-starter聚合項目打可執行的jar包

inf 惡心 class int reg spa 打包成 tco public springboot2.0+dubbo聚合項目打可執行的jar包 springboot2.0+dubbo-spring-boot-starter項目服務方打包和以前老版本的dubbo打包方式不

RabbiMQ基礎以及spring-boot-starter-amqp使用

outb convert net ESS XML fig vhost chan 多個 ? RabbitMQ是一種基於amq協議的消息隊列,本文主要記錄一下rabbitmq的基礎內容以及使用spring-boot-starter-amqp操作rabbitmq。 1,rabbi

實現基於redis的分散式鎖並整合spring-boot-starter

文章目錄 概述 使用 1.導包 2.寫一個實現鎖功能的service 3.檢查redis的key 4.呼叫(鎖成功) 5.呼叫(鎖失敗) 實現