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

 

原文地址:https://www.cnblogs.com/hejj-bk/p/11304487.html