SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)
前提: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集成和开发库)的更多相关文章
- SpringBoot添加多数据源mysql和oracle
项目结构 多数据源配置文件 MultiDataSourceConfig.java SqlSessionTemplate1.java SqlSessionTemplate2.java package c ...
- Oracle连接odbc数据源
Oracle连接odbc数据源 说明 oracle连接ODBC数据源有两种方式,hsodbc和dg4odbc,简单说dg4odbc是hsodbc的升级.两种连接方法大致一样,现将连接步骤说明如下: 检 ...
- springboot添加多数据源连接池并配置Mybatis
springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 ...
- Springboot+Mybatis+Pagehelper+Aop动态配置Oracle、Mysql数据源
本文链接:https://blog.csdn.net/wjy511295494/article/details/78825890 Springboot+Mybatis+Pagehelper+Aop ...
- Superset连接Impala数据源
公司最近在superset上面做二次开发,目前对接了mysql和oracle数据源,对这两个源的SQL操作查询做了完善和兼容.目前有新的需求就是要对接大数据部门的HBASE和HIVE数据源,由于sup ...
- springboot+ibatis 多数据源配置
这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...
- SpringBoot配置多数据源时遇到的问题
SpringBoot配置多数据源 参考代码:Spring Boot 1.5.8.RELEASE同时配置Oracle和MySQL 原作者用的是1.5.8版本的SpringBoot,在升级到2.0.*之后 ...
- 大数据技术之_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 对象的方法以及关 ...
- SpringBoot 的多数据源配置
最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发.代码很简单,下面是实现的 ...
随机推荐
- kali一些基础工具
目录 netcat netcat https://blog.csdn.net/fageweiketang/article/details/82833193 网络工具当中的瑞士军刀 -nc指令,nc可以 ...
- Linux初步了解
文件系统类型:swap分区:用于内存扩充,用磁盘兑换,磁盘是内存的两倍,便于替换 / 分区:容纳根文件系统 文件名:由字母,数字,下划线,圆点组成 文件类型:显示在每一行的左边第一个字符 普通文件 ...
- 破晓行动----带你总结JVM的知识大全(一)
JVM线程 + JVM内存区域
- iNeuOS工业互联平台,机床&PLC硬件网关与平台无缝对接,进行数据交互
目 录 1. 概述... 2 2. 平台演示... 2 3. 硬件网关的基本操作... 3 3.1 数据采集... 3 3.2 ...
- mysql-2-where
#进阶2:条件查询 /* 语法: SELECT 查询列表 FROM 表名 WHERE 筛选条件 分类: 1.按条件表达式筛选:> < = != <> >= <= 2 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...
- helm包管理工具
K8S正常部署应用是如下方式 kubectl create deployment web --image=nginx --dru-run=client -o yaml > web.yaml ku ...
- 在Windows7系统中设置虚拟内存大小
当我们的电脑物理内存空间不够用时,操作系统就会自动从硬盘空间上分出一块空间来当内存使用,这就是虚拟内存.可以说虚拟内存是物理内存的补充,是备用的物理内存.一般来说,如果电脑里的程序不多,占用内存资源不 ...
- MeteoInfoLab脚本示例:格点数据散点图
绘制格点数据的散点图,用scaterm函数. 脚本程序: f = addfile('D:/Temp/GrADS/model.ctl') ps = f['PS'][0,(10,60),(60,140)] ...