spring集成hbase,簡單的demo


1.spring集成hbase,它是由spring-data系列中的一種,可去https://spring.io/projects/spring-hadoop#overview查看他的介紹,以及簡單的demo

然后下載下來,進行啟動。

2.更新maven 依賴,啟動他的app測試類,即可啟動成功,可以測試一下,提供了查詢所有和保存的方法。

3.集成到自己的spring-mybatis項目中,引入他需要依賴的jar包,主要,需要將jasper-compiler,jasper-runtime去除,否則和tomcat的沖突,無法啟動,spring版本若需要修改,則在自己的項目中重新引入spring的jar包。

<!--Spring start -->
  <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>

<!--Spring end-->

<!-- spring 集成hbase版本配置 -->
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <spring.hadoop.version>2.2.0.RELEASE</spring.hadoop.version>
  <hadoop.version>2.6.0</hadoop.version>
  <hbase.version>0.98.5-hadoop2</hbase.version>
</properties>

<!-- spring 集成hbase 所需要的jar包 -->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-hadoop</artifactId>
  <version>${spring.hadoop.version}</version>
  <exclusions>
    <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-common</artifactId>
  <version>${hadoop.version}</version>
  <scope>compile</scope>
  <exclusions>
    <exclusion>
      <groupId>tomcat</groupId>
      <artifactId>jasper-runtime</artifactId>
    </exclusion>
    <exclusion>
      <groupId>tomcat</groupId>
      <artifactId>jasper-compiler</artifactId>
    </exclusion>
  </exclusions>

</dependency>

然后新建spring-hbase.xml,然后引入到springmvc啟動配置文件applicationContext.xml中

 

 

 

4、spring-hbase.xml 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:hdp="http://www.springframework.org/schema/hadoop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd">

<!--<context:property-placeholder location="hbase.properties"/> -->

<!--<context:component-scan base-package="org.springframework.samples.hadoop.hbase"/>-->

<hdp:configuration/>

<hdp:hbase-configuration/>

<bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate">
<property name="configuration" ref="hbaseConfiguration"/>
</bean>

</beans>

 注意路徑寫對,否則會報BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

啟動tomcat或者jetty,此時,啟動正常,

控制層代碼

service層代碼

UserRepository save方法

 

 

public Boolean save(final User entity) {
  return hbaseTemplate.execute(tableName, new TableCallback<Boolean>() {
  @SuppressWarnings("deprecation")
  public Boolean doInTable(HTableInterface table) throws Throwable {
    boolean flag = false;
    try{
      byte[] rowkey = entity.getRowKey().getBytes();
      Put put = new Put(rowkey);
      //通過屬性名稱,分解出 列族和行建
      Field[] fields = entity.getClass().getDeclaredFields();
      //設置反射允許訪問私有變量
      Field.setAccessible(fields, true);
      for(int i = 0 , len = fields.length; i < len; i++){
        Field field = fields[i];
        String varName = field.getName();
        if(!"rowKey".equals(varName)){
        String[] familyAndQual = varName.split("[_]");
          if(2==familyAndQual.length){
            if(field.get(entity) instanceof byte[]){
              //數組類型
              put.add(Bytes.toBytes(familyAndQual[0]),Bytes.toBytes(familyAndQual[1]), (byte[]) field.get(entity));
            }else{
              //string類型
              put.add(Bytes.toBytes(familyAndQual[0]),Bytes.toBytes(familyAndQual[1]), Bytes.toBytes(field.get(entity).toString()) );
            }

          }
        }
      }
      table.put(put);
      flag = true;
    }catch(Exception e){
      e.printStackTrace();
    }
    return flag;
    }
  });
}

User.java為需要保存到hbase的對象,其中列族為u

 

然后測試工具用fidder或者postman測試,類型content-type為application/json

User-Agent: Fiddler
Content-Type: application/json
Accept: application/json

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM