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);
    }

}

监听:

public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    } catch (InstantiationException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (UnsupportedLookAndFeelException e) {
                        e.printStackTrace();
                    }
                    new DBManager().initUI();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
            }
        });
    }
}

 

 

配置文件: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;

    。。。
}

 

 
posted @ 2020-10-29 09:45  蔡徐坤1987  阅读(1917)  评论(0编辑  收藏  举报