SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)
阅读原文时间:2023年07月11日阅读:1

前提: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;

。。。  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章