HBase 实战: SpringBoot+Mybatis+Phoenix +Mysql 多数据源配置

2,434 阅读2分钟

1.前置环境

2.安装Phoenix

tar -zxvf apache-phoenix-4.14.3-HBase-1.4-bin.tar.gz
  • 重命名
mv apache-phoenix-4.14.3-HBase-1.4-bin phoenix

复制

cp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar /usr/local/bigdata/hbase/lib/
scp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar root@k8s-node1:/usr/local/bigdata/hbase/lib/ 
scp phoenix-4.14.3-HBase-1.4-server.jar phoenix-core-4.14.3-HBase-1.4.jar root@k8s-node2:/usr/local/bigdata/hbase/lib/ 

替换

  • 将hbase的配置文件hbase-site.xml、 hadoop下的配置文件core-site.xml 、放到phoenix/bin/下,替换phoenix原来的配置文件。
  • 重启hbase集群,使Phoenix的jar包生效。

3.验证是否安装成功

在phoenix/bin下输入命令:
./sqlline.py node1:2181

4.目录结构

5.pom配置文件

<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>4.14.3-HBase-1.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </exclusion>
    </exclusions>
</dependency>

6.application-dev.yml

server:
  port: 8080
spring:
  datasource:
    mysql:
      jdbc-url: jdbc:mysql://localhost:3306/singodox?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    phoenix:
      jdbc-url: jdbc:phoenix:k8s-master:2181
      driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      # 池中维护的最小空闲连接数
      minimum-idle: 10
      # 池中最大连接数,包括闲置和使用中的连接
      maximum-pool-size: 20
      # 此属性控制从池返回的连接的默认自动提交行为。默认为 true
      auto-commit: true
      # 允许最长空闲时间
      idle-timeout: 30000
      # 此属性表示连接池的用户定义名称,主要显示在日志记录和 JMX 管理控制台中,以标识池和池配置。 默认值:自动生成
      pool-name: custom-hikari
      #此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000 即 30 分钟
      max-lifetime: 1800000
      # 数据库连接超时时间,默认 30 秒,即 30000
      connection-timeout: 30000
      # 连接测试 sql 这个地方需要根据数据库方言差异而配置 例如 oracle 就应该写成  select 1 from dual
      connection-test-query: SELECT 1

7.多数据源配置

  • mysql
@Configuration
@MapperScan(basePackages = "com.pandanodes.dao.mysql.**",
        sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {

    public static String MYSQL_LOCATION_PATTERN ="classpath:/mapper/mysql/*.xml";

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    public DataSource mysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MYSQL_LOCATION_PATTERN));
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean
    @Primary
    public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    @Primary
    public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}


  • phoenix
@Configuration
@MapperScan(basePackages = "com.pandanodes.dao.phoenix.**",
        sqlSessionTemplateRef = "phoenixSqlSessionTemplate")
public class PhoenixDataSourceConfig {


    public static String PHOENIX_LOCATION_PATTERN ="classpath:/mapper/phoenix/*.xml";

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.phoenix")
    public DataSource phoenixDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory phoenixSqlSessionFactory(@Qualifier("phoenixDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(PHOENIX_LOCATION_PATTERN));
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean
    public DataSourceTransactionManager phoenixTransactionManager(@Qualifier("phoenixDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public SqlSessionTemplate phoenixSqlSessionTemplate(@Qualifier("phoenixSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

8.demo地址: github.com/panda-nodes…

熊猫笔记邮箱: panda_nodes@163.com