前提:1.连接hadoop需要本地安装 winutils.exe 并在程序指定,不然程序会报错  IOException: HADOOP_HOME or hadoop.home.dir are not set. 但不指定程序可能启动。

2.要在springboot容器启动后再初始化页面,否则使用时会取不到bean

整体思路:程序启动时,扫描所有包的@Configation,有使用到自定义的配置可以用@Value映射变量

HBASE读取配置:因为涉及到的配置较多,有两种方式可以考虑,最终注入,反转来调用的只有两个变量  admin、connetion来实现查询和持久化功能

第一种方式:通过xml配置文件,命名一定要hbase-site.xml(还有一个hbase-defualt.xml),这样在装载 org.apache.hadoop.conf.Configuration时程序就会自动读取resource下的xml文件封装。

第二种方式:通过yml配置信息,但不用所有变量都取出来;写一个工具类,IntegrateHBaseProperties指定hbase配置的父路径,并写一个config的set方法,定义一个map变量;在读取配置类里启动这个类                                  @EnableConfigurationProperties(IntegrateHBaseProperties.class),数据就自动封装到map变量里,再用set方法读取放在org.apache.hadoop.conf.Configuration里;

ORACLE以及IMPALA配置:这两者是一样的,这里都用读取yml中的配置,拿到dataSource和jdbcTemplate,而jdbcTemplate这个类里就有我们所有想要的操作了;

下面代码只贴一些主要的,源码是我用swing写的一个多配置连接数据库工具,已上传到百度网盘上

启动类:HbaseApplication
@SpringBootApplication
public class HbaseApplication { public static void main(String[] args) throws IOException {
File workaround = new File(".");
System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
new File("./bin").mkdirs();
new File("./bin/winutils.exe").createNewFile();
System. setProperty("java.awt.headless", "false");
SpringApplication app = new SpringApplication(HbaseApplication.class);
app.addListeners(new ApplicationStartup());
app.run(args);
} }

配置文件:application.yml

hbase:
local:
config:
hbase.zookeeper.quorum: ddatanode17222.ifoton.com.cn,dnamenode17226.ifoton.com.cn,ddatanode17224.ifoton.com.cn,dnamenode17225.ifoton.com.cn,ddatanode17223.ifoton.com.cn
hbase.zookeeper.property.clientPort: 2181
hbase.rest.ssl.enabled: false
hbase.rpc.protection: authentication
hbase.security.authentication: simple
hbase.snapshot.master.timeout.millis: 60000
hbase.snapshot.region.timeout: 60000
hbase.snapshot.master.timeoutMillis: 60000
hbase.snapshot.enabled: true
hbase.rpc.timeout: 60000
hbase.thrift.support.proxyuser: false
hbase.regionserver.thrift.http: false
hbase.coprocessor.region.classes: org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint
hbase.client.scanner.timeout.period: 60000
hbase.fs.tmp.dir: /user/${user.name}/hbase-staging
hbase.client.primaryCallTimeout.multiget: 10
hbase.client.primaryCallTimeout.get: 10
hbase.ipc.client.allowsInterrupt: true
hbase.client.keyvalue.maxsize: 10485760
hbase.client.scanner.caching: 100
hbase.client.retries.number: 35
hbase.client.pause: 100
hbase.client.write.buffer: 2097152
hbase.rootdir: hdfs://nameservice226/hbase
zookeeper.znode.rootserver: root-region-server
zookeeper.session.timeout: 60000
integrate:
config:
hbase.zookeeper.quorum: pdatanode66.ifoton.com.cn,pdatanode64.ifoton.com.cn,pdatanode63.ifoton.com.cn,pdatanode65.ifoton.com.cn,pnamenode62.ifoton.com.cn
hbase.zookeeper.property.clientPort: 2181
hbase.rest.ssl.enabled: false
hbase.rpc.protection: authentication
hbase.security.authentication: simple
hbase.snapshot.master.timeout.millis: 60000
hbase.snapshot.region.timeout: 60000
hbase.snapshot.master.timeoutMillis: 60000
hbase.snapshot.enabled: true
hbase.rpc.timeout: 60000
hbase.thrift.support.proxyuser: false
hbase.regionserver.thrift.http: false
hbase.coprocessor.region.classes: org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint
hbase.client.scanner.timeout.period: 60000
hbase.client.primaryCallTimeout.multiget: 10
hbase.client.primaryCallTimeout.get: 10
hbase.ipc.client.allowsInterrupt: true
hbase.client.keyvalue.maxsize: 10485760
hbase.client.scanner.caching: 100
hbase.client.retries.number: 35
hbase.client.pause: 100
hbase.client.write.buffer: 2097152
hbase.rootdir: hdfs://nameservice1/hbase
zookeeper.znode.rootserver: root-region-server
zookeeper.session.timeout: 60000 impala:
url: jdbc:impala://172.24.17.158:21050/default;AuthMech=0;SocketTimeout=0
port: 21050
schema: default
user: impala
password: impala
driverClass: com.cloudera.impala.jdbc41.Driver
url2: jdbc:impala://10.100.62.61:21050/default;AuthMech=0;SocketTimeout=0 spring:
freemarker:
cache: false
charset: utf-8
enabled: true
datasource:
type: com.alibaba.druid.pool.DruidDataSource
max-idle: 10
max-wait: 10000
min-idle: 5
initial-size: 5
integrate:
driver-class-name: oracle.jdbc.OracleDriver
username: foton
password: 3UI%die)e2_2urYUCN
jdbc-url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.58.218)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=iovdb)))
type: ORACLE
local:
driver-class-name: oracle.jdbc.OracleDriver
username: foton
password: 7Ca30Rt
jdbc-url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.24.7.189)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=iovdb)))
type: ORACLE

配置类:ImpalaConfig:

@Configuration
public class ImpalaConfig {
@Value("${impala.url}")
private String impalaUrl;
@Value("${impala.url2}")
private String impalaUrl2;
@Value("${impala.port}")
private String impalaPort;
@Value("${impala.schema}")
private String impalaScheme;
@Value("${impala.user}")
private String impalaUser;
@Value("${impala.password}")
private String impalaPassword; @Bean(name = {"impalaJdbcTemplate"})
@Qualifier("impalaJdbcTemplate")
public JdbcTemplate getImpalaJdbcTemplate() {
String connUrl = this.impalaUrl + ":" + this.impalaPort + "/" + this.impalaScheme + ";auth=noSasl";
DataSource dataSource = new DataSource();
dataSource.setURL(connUrl);
return new JdbcTemplate(dataSource);
} @Bean(name = {"impalaJdbcTemplate2"})
@Qualifier("impalaJdbcTemplate2")
public JdbcTemplate getImpalaJdbcTemplate2() {
String connUrl = this.impalaUrl2 + ":" + this.impalaPort + "/" + this.impalaScheme + ";auth=noSasl";
DataSource dataSource = new DataSource();
dataSource.setURL(connUrl);
return new JdbcTemplate(dataSource);
}
配置类2:IntegrateHBaseConfig:
@Configuration
@EnableConfigurationProperties(IntegrateHBaseProperties.class)
public class IntegrateHBaseConfig { private final IntegrateHBaseProperties properties; public IntegrateHBaseConfig(IntegrateHBaseProperties properties) {
this.properties = properties;
} @Bean(name = "integrateHBaseService")
@Qualifier("integrateHBaseService")
@Primary
public HBaseService integrateHBaseService() {
org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
Map<String, String> config = properties.getConfig();
Set<String> keySet = config.keySet();
for (String key : keySet) {
conf.set(key, config.get(key));
}
return new HBaseService(conf);
} }

配置类3:LocalHBaseConfig

@Configuration
@EnableConfigurationProperties(LocalHBaseProperties.class)
public class LocalHBaseConfig { private final LocalHBaseProperties properties; public LocalHBaseConfig(LocalHBaseProperties properties) {
this.properties = properties;
} @Bean(name = "localHBaseService")
@Qualifier("localHBaseService")
@Primary
public HBaseService localHBaseService() {
org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
Map<String, String> config = properties.getConfig();
Set<String> keySet = config.keySet();
for (String key : keySet) {
conf.set(key, config.get(key));
}
return new HBaseService(conf);
} }

配置类4:OracleConfig

@Configuration
public class OracleConfig {
//@Primary注解在哪个ds,默认使用那个ds @Bean(name = "integrateDataSource")
@Qualifier("integrateDataSource")
@ConfigurationProperties(prefix="spring.datasource.integrate")
public DataSource integrateDataSource() {
return DataSourceBuilder.create().build();
} @Bean(name = "localDataSource")
@Qualifier("localDataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.local")
public DataSource localDataSource() {
return DataSourceBuilder.create().build();
} @Bean(name = "integrateJdbcTemplate")
public JdbcTemplate integrateJdbcTemplate(
@Qualifier("integrateDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
} @Bean(name = "localJdbcTemplate")
public JdbcTemplate localJdbcTemplate(
@Qualifier("localDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
} }

业务类:DBService

@Service
public class DBService { @Autowired
@Qualifier("localHBaseService")
HBaseService localHBaseService;
@Autowired
@Qualifier("integrateHBaseService")
HBaseService integrateHBaseService;
@Autowired
@Qualifier("localJdbcTemplate")
JdbcTemplate localJdbcTemplate;
@Autowired
@Qualifier("impalaJdbcTemplate")
JdbcTemplate impalaJdbcTemplate;
@Autowired
@Qualifier("impalaJdbcTemplate2")
JdbcTemplate impalaJdbcTemplate2;
@Autowired
@Qualifier("integrateJdbcTemplate")
JdbcTemplate integrateJdbcTemplate; 。。。
}
 

SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)的更多相关文章

  1. SpringBoot添加多数据源mysql和oracle

    项目结构 多数据源配置文件 MultiDataSourceConfig.java SqlSessionTemplate1.java SqlSessionTemplate2.java package c ...

  2. Oracle连接odbc数据源

    Oracle连接odbc数据源 说明 oracle连接ODBC数据源有两种方式,hsodbc和dg4odbc,简单说dg4odbc是hsodbc的升级.两种连接方法大致一样,现将连接步骤说明如下: 检 ...

  3. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

  4. Springboot+Mybatis+Pagehelper+Aop动态配置Oracle、Mysql数据源

      本文链接:https://blog.csdn.net/wjy511295494/article/details/78825890 Springboot+Mybatis+Pagehelper+Aop ...

  5. Superset连接Impala数据源

    公司最近在superset上面做二次开发,目前对接了mysql和oracle数据源,对这两个源的SQL操作查询做了完善和兼容.目前有新的需求就是要对接大数据部门的HBASE和HIVE数据源,由于sup ...

  6. springboot+ibatis 多数据源配置

    这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...

  7. SpringBoot配置多数据源时遇到的问题

    SpringBoot配置多数据源 参考代码:Spring Boot 1.5.8.RELEASE同时配置Oracle和MySQL 原作者用的是1.5.8版本的SpringBoot,在升级到2.0.*之后 ...

  8. 大数据技术之_11_HBase学习_02_HBase API 操作 + HBase 与 Hive 集成 + HBase 优化

    第6章 HBase API 操作6.1 环境准备6.2 HBase API6.2.1 判断表是否存在6.2.2 抽取获取 Configuration.Connection.Admin 对象的方法以及关 ...

  9. SpringBoot 的多数据源配置

    最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发.代码很简单,下面是实现的 ...

随机推荐

  1. 在Linux系统下搭建和配置一个minio文件服务器(二)

    上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进s ...

  2. Spring Boot(二) :Redis 使用

    Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化.除此 ...

  3. 使用implicitly demo

    泛型:  Context Bounds // //定义一个隐式值, 这个值不能少, 要不找不到比较的对象 implicit val personCompartor = new Ordering[Per ...

  4. spring ioc 源码分析(三)--finishBeanFactoryInitialization(beanFactory)

    之前的博客专门分析了一个类到BeanDefinition的创建过程,现在分析BeanDefinition 到一个bean的创建过程:从refresh() 方法的---->finishBeanFa ...

  5. 注册表“CLSID”下面的“InprocServer32”子键是什么?

    这个键值有什么用?每个CLSID下基本都有,即使没有其它项也会有此项.谁能详细说下,"InprocServer32"子键起什么作用?谢了. 刚好遇到这问题了,这是我找到的:Inpr ...

  6. C++中union的使用方法

    转载:https://blog.csdn.net/hou09tian/article/details/80816445 1 概述 1.1 定义 union即为联合,它是一种特殊的类.通过关键字unio ...

  7. matlab find函数使用语法

    find 找到非零元素的索引和值 语法: 1. ind = find(X) 2. ind = find(X, k) 3. ind = find(X, k, 'first') 4. ind = find ...

  8. [学习笔记] Tarjan算法求强连通分量

    今天,我们要探讨的就是--Tarjan算法. Tarjan算法的主要作用便是求一张无向图中的强连通分量,并且用它缩点,把原本一个杂乱无章的有向图转化为一张DAG(有向无环图),以便解决之后的问题. 首 ...

  9. javaagent+asm破解censum

    内容介绍 最近在学习字节码相关知识,了解到通过ASM字节码改写技术来做破解一些软件破解,非常感兴趣,本文记录一下破解 Censum的过程(仅个人学习使用). 之前也写过一篇暴力破解Censum的文章, ...

  10. Linux系统常用API总结

    1.错误处理 - fprintf() - perror() 2.通用I/O模型 - fd = open(pathname, flags, mode) - numread = read(fd, buff ...