spring boot--06整合redis和hbase和Mybatis

1.整合redis

  项目依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wx</groupId>
    <artifactId>cloudnotes</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloudnotes</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--热部署依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!--模板依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--web服务器配置,这里使用的web服务器为tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- log related -->
        <dependency> <!-- exclude掉spring-boot的默认log配置 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions><!-- a. -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 配置 log4j2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- 加上这个才能辨认到log4j2.yml文件 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>
        <!-- end of log related -->
        <!--hbase依赖-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-hadoop</artifactId>
            <version>2.5.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--spring boot配置类的注解-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 添加redis依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  添加依赖:

 <!-- 添加redis依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>

 

封装的redis工具类:

package com.wx.cloudnotes.utils.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Component
public class RedisTools {
    public static int SECONDS = 3600 * 24;//为key指定过期时间,单位是秒
    @Autowired
    private RedisTemplate<Object, Object> redisTemplate;


    /**==================common================*/
    /**
     * 指定缓存失效时间
     */
    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 根据key获取过期时间
     */
    public long getExpire(String key) {
        return redisTemplate.getExpire(key);
    }

    /**
     * 判断key是否存在
     */
    public boolean isKeyExist(String key) {
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /***
     * 删除缓存,可以传一个或多个值,如果是多个值的话默认数据类型是数组
     * @param keys
     * @return
     */
    public void deleteCache(String... keys) {
        if (keys != null && keys.length > 0) {
            if (keys.length == 1) {
                redisTemplate.delete(keys[0]);
            } else {
                redisTemplate.delete(CollectionUtils.arrayToList(keys));
            }
        }
    }


    /**==================String类================*/
    /**
     * 普通的缓存放入
     */
    public boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 普通缓存获取
     */
    public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }

    /***
     * 添加string类型的数据并设置过期时间
     * @param key
     * @param value
     * @param times
     * @return
     */
    public boolean set(String key, String value, long times) {
        try {
            redisTemplate.opsForValue().set(key, value, times, TimeUnit.SECONDS);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /***
     * 递增
     * @param key
     * @param delta
     * @return
     */
    public long incr(String key, long delta) {
        if (delta < 0) {
            throw new RuntimeException("递增因子必须大于0");
        }
        return redisTemplate.opsForValue().increment(key, delta);
    }

    /***
     * 递减
     * @param key
     * @param delta
     * @return
     */
    public long decr(String key, long delta) {
        if (delta < 0) {
            throw new RuntimeException("递减因子必须大于0");
        }
        return redisTemplate.opsForValue().increment(key, -delta);
    }

    /**==================Map类型================*/
    /**
     * HashGet
     *
     * @param key  键 不能为null
     * @param item 项 不能为null
     * @return 值
     */
    public Object hget(String key, String item) {
        return redisTemplate.opsForHash().get(key, item);
    }

    /**
     * 获取hashKey对应的所有键值
     *
     * @param key 键
     * @return 对应的多个键值
     */
    public Map<Object, Object> hmget(String key) {
        return redisTemplate.opsForHash().entries(key);
    }

    /**
     * HashSet
     *
     * @param key 键
     * @param map 对应多个键值
     * @return true 成功 false 失败
     */
    public boolean hmset(String key, Map<String, Object> map) {
        try {
            redisTemplate.opsForHash().putAll(key, map);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * HashSet 并设置时间
     *
     * @param key  键
     * @param map  对应多个键值
     * @param time 时间(秒)
     * @return true成功 false失败
     */
    public boolean hmset(String key, Map<String, Object> map, long time) {
        try {
            redisTemplate.opsForHash().putAll(key, map);
            if (time > 0) {
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**==================Set类型================*/
    /**==================List类型================*/
}

 测试:

@Controller
public class IndexController {

    @Autowired
    private RedisTools redisTools;

    @RequestMapping("/index")
    public String index() {
        redisTools.set("liu", "dehua", 50);
        System.out.println(redisTools.get("liu"));
        return "index/index";
    }
}

 

2.整合hbase: 

 很奇怪,yml文件注释为中文的时候会报错:Failed to load property source from location 'classpath:/application.yml'

server:
    port: 8080
    error:
    #服务器出错后的处理路径/error
      path: /error
    #spring.jackson.serialization.fail-on-empty-beans=false

spring:
   #thymeleaf模版前缀
   thymeleaf:
       prefix: classpath:/templates/
       suffix: .html
       cache: false
       encoding: utf-8
   #redis配置
   redis:
     host: 192.168.25.134
     port: 6379
     jedis:
       pool:
         max-active: 8
     timeout: 2000ms



#日志配置  INFO 级别以上的信息才会打印到控制台,可以自己设定日志输出级别
logging:
  config: classpath:log4j2.yml

#文件上传配置文件 Spring Boot 2.x
#spring.servlet.multipart.maxFileSize=3000MB
#spring.servlet.multipart.maxRequestSize=3000MB

#mybaties
#spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
#spring.datasource.username=root
#spring.datasource.password=133309
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#hbase配置
#hbase:
  #config:
    #hbase.zookeeper.quorum: zookeeper1
    #hbase.zookeeper.property.clientPort: 2181

#hbase_zookeeper_quorum=master,work1,work2
#hbase_zookeeper_property_clientPort=2181
#hbase_pool_size=100
#writeBufferSize的单位是byte字节数1024*512
#hbaseWriteBuffer=524288

 yml配置:

  

 由于springboot 没有集成hbase,所以自己写一个配置类:

package com.wx.cloudnotes.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.hadoop.hbase.HbaseTemplate;

@Configuration
public class HbaseConfig {
    @Value("${hbase.zookeeper.quorum}")
    private String zookeeperQuorum;

    @Value("${hbase.zookeeper.property.clientPort}")
    private String clientPort;

   /* @Value("${zookeeper.znode.parent}")
    private String znodeParent;*/

    @Bean
    public HbaseTemplate hbaseTemplate() {
        org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
        conf.set("hbase.zookeeper.quorum", zookeeperQuorum);
        conf.set("hbase.zookeeper.property.clientPort", clientPort);
       /* conf.set("zookeeper.znode.parent", znodeParent);*/
        return new HbaseTemplate(conf);
    }
}

 封装工具类:

package com.wx.cloudnotes.utils.hbase;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.hadoop.hbase.HbaseTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

@Component
public class HbaseTools {

    //参考博客:https://blog.csdn.net/u010775025/article/details/80773679

    @Autowired
    private HbaseTemplate hbaseTemplate;


    /**
     * 添加数据
     */
    public boolean inserData(String tableName, String rowKey, String lieZu, String lie, String value) {
        try {
            hbaseTemplate.put(tableName, rowKey, lieZu, lie, Bytes.toBytes(value));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 查询数据
     */
    public List<Result> getData(String tableName, String startRowkey, String stopRowkey, String column, String qualifier) {
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        if (StringUtils.isNotBlank(column)) {
            filterList.addFilter(new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(column))));
        }
        if (StringUtils.isNotBlank(qualifier)) {
            filterList.addFilter(new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(qualifier))));
        }
        Scan scan = new Scan();
        if (filterList.getFilters().size() > 0) {
            scan.setFilter(filterList);
        }
        scan.setStartRow(Bytes.toBytes(startRowkey));
        scan.setStopRow(Bytes.toBytes(stopRowkey));

        return hbaseTemplate.find(tableName, scan, (rowMapper, rowNum) -> rowMapper);

    }

    public List<Result> getListRowkeyData(String tableName, List<String> rowKeys, String familyColumn, String column) {
        return rowKeys.stream().map(rk -> {
            if (StringUtils.isNotBlank(familyColumn)) {
                if (StringUtils.isNotBlank(column)) {
                    return hbaseTemplate.get(tableName, rk, familyColumn, column, (rowMapper, rowNum) -> rowMapper);
                } else {
                    return hbaseTemplate.get(tableName, rk, familyColumn, (rowMapper, rowNum) -> rowMapper);
                }
            }
            return hbaseTemplate.get(tableName, rk, (rowMapper, rowNum) -> rowMapper);
        }).collect(Collectors.toList());
    }

}

 测试:

@RequestMapping("/index")
    public String index() {
        hbaseTools.inserData("user", "wang_123456", "info1", "name", "svnkdsnvkjs");
        return "index/index";
    }

    @RequestMapping("/get")
    public String get() {
        List<String> list = new ArrayList<String>();
        list.add("wang_123456");
        List<Result> listRowkeyData = hbaseTools.getListRowkeyData("user", list, "info1", "name");
        for (Result listRowkeyDatum : listRowkeyData) {
            byte[] nameBytes = listRowkeyDatum.getValue(Bytes.toBytes("info1"), Bytes.toBytes("name"));
            System.out.println(new String(Bytes.toString(nameBytes)));
        }
        return "";
    }

整合Mybatis:

  首先安装一个navica,链接在这里:https://blog.csdn.net/jsnhux/article/details/80921454

  其次创建一个数据库创建一个user表添加一条数据

  添加pom依赖:

      <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency>
        <!--连接池依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

yml文件:

server:
    port: 8080
    error:
      path: /error
spring:
  thymeleaf:
    suffix: .html
    cache: false
    encoding: UTF-8
    prefix:  classpath:/templates/
  redis:
    timeout: 2000ms
    host: 192.168.25.134
    port: 6379
  profiles:
        active: prod
  datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/cloud_notes?useSSL=true&useUnicode=true&characterEncoding=utf-8
      username: root
      password: 133309
  jpa:
      hibernate:
        ddl-auto: create
      show-sql: true

mybatis:
  mapper-locations: classpath:mapper/UserMapper.xml
  type-aliases-package: com.wx.cloudnotes.domain.User

logging:
  config: classpath:log4j2.yml


hbase:
  zookeeper:
    quorum: zookeeper1
    property:
      clientPort: 2181

 实体类:

package com.wx.cloudnotes.domain;

import java.io.Serializable;

public class User {

    private Integer id;
    private String user_name;
    private String user_password;
    private String user_phone;
    private String user_email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_password() {
        return user_password;
    }

    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }

    public String getUser_phone() {
        return user_phone;
    }

    public void setUser_phone(String user_phone) {
        this.user_phone = user_phone;
    }

    public String getUser_email() {
        return user_email;
    }

    public void setUser_email(String user_email) {
        this.user_email = user_email;
    }
}

 service:

package com.wx.cloudnotes.service;

import com.wx.cloudnotes.domain.User;

import java.util.List;

public interface UserService {
    List<User> selectAll();

    User selectOne(Integer id);

    void save(User user);
}


IMP:


package com.wx.cloudnotes.service.imp;

import com.wx.cloudnotes.dao.UserMapper;
import com.wx.cloudnotes.domain.User;
import com.wx.cloudnotes.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImp implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> selectAll() {
        return userMapper.selectAll();

    }

    @Override
    public User selectOne(Integer id) {
        return userMapper.selectOne(id);
    }

    @Override
    public void save(User user) {

    }
}

 dao层mapper:

package com.wx.cloudnotes.dao;

import com.wx.cloudnotes.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Mapper
public interface UserMapper {
    List<User> selectAll();

    User selectOne(Integer id);

    void save(User user);
}

  resouraces下新建mapper目录创建mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" " http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.wx.cloudnotes.dao.UserMapper">
    <select id="selectAll" resultType="com.wx.cloudnotes.domain.User">
        select * from user
    </select>
    <select id="selectOne" resultType="com.wx.cloudnotes.domain.User" parameterType="Integer">
        select * from user where id=#{id}
    </select>
    <insert id="save" parameterType="com.wx.cloudnotes.domain.User">
        insert into user(name,age) values(#{name},#{age})
    </insert>
</mapper>

 Controller:

 @RequestMapping("/getUser")
    @ResponseBody
    public User getUser(@RequestParam(value = "id") Integer id) {
        System.out.println(id);
        return userService.selectOne(id);
    }

访问:http://localhost:8080/getUser?id=1

整合成功!!!

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值