多数据源连接池

2023-11-15

做元数据管理,需要查询多个数据源的元数据,不用orm框架,直接用java实现。如下

主要有几个重要的类:MultiPool (连接池)  ConnectionManager (连接管理器) DBConenction (数据库连接对象)

1. MultiPool 和 ConnectionManager 都使用单例模式

2. 数据库连接参数如driverClassName, url 使用properties配置

3. 经测试,mysql,oracle, hive2测试通过

4. 添加动态和静态管理连接池个数(还未实现,后续补充)


MultiPool代码

package wuyx.multipool;

import java.sql.Connection;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/***
 * 多数据源链接池
 * @author wuyx
 *
 */
public class MultiPool {
    private static MultiPool instance=null;
    
    private static Map<String, List<Connection>> pool;
    private static Map<String, List<Connection>> free = null;
    
    static{
        free = new Hashtable<String, List<Connection>>();
        pool = new Hashtable<String, List<Connection>>();
    }
    
    /**
     * 获取实例
     * @return
     */
    public static MultiPool getInstance(){
        if(instance == null){
            instance = new MultiPool();
        }
        return instance;
    }
    
    /**
     * 获取一个指定库的连接
     * @param dbType
     * @return
     */
    public Connection get(String dbType){
        return first(dbType);
    }
    
    /**
     * 返回第一个空闲的连接
     * @param dbType
     * @return
     */
    synchronized Connection first(String dbType){
        Connection ret = free.get(dbType).get(0);
        free.remove(0);
        return ret;
    }
    
    /**
     * 释放连接
     * @param dbType
     * @param conn
     */
    public synchronized void release(String dbType, Connection conn){
        free.get(dbType).add(conn);
    }
    
    /**
     * 往连接池中增加一个连接
     * @param dbType
     * @param conn
     */
    public synchronized void add(String dbType, Connection conn){
        if(pool.get(dbType) == null){
            List<Connection> list = new Vector<Connection>();
            pool.put(dbType, list);
        }
        if(free.get(dbType) == null){
            List<Connection> fs = new Vector<Connection>();
            free.put(dbType,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多数据源连接池 的相关文章

随机推荐

  • iOS上架报错:无法添加以供审核

    无法提交以供审核 要开始审核流程 必须提供以下项目 您必须为要添加的 app 提供版权信息 您在提交 app 审核时遇到的问题是因为需要提供版权信息 而您的 app 缺少相关的版权信息 以下是解决此问题的步骤 确认您是否拥有 app 的版权
  • kettle 关于数据库事务操作的解释说明

    事务与数据库 1 数据库连接只在执行作业或转换时使用 在作业里 每一个作业项都打开和关闭一个独立的数据库连接 转换也是如此 但是因为转换里的步骤是并行执行的 每个步骤都打开一个独立的数据库连接并开始一个事务 尽管这样在很多情况下会提高性能
  • Airbnb深度学习在搜索领域的探索总结

    今天的博客主要参考了Airbnb发表的paper Applying Deep Learning To Airbnb Search 这篇paper介绍了近2年Airbnb在搜索场景下所使用模型的演进路线 以及一些失败的总结和经验的总结 最难能
  • 常用的渗透测试工具之 SQLMap

    web安全攻防 第三章学习之SQLmap SQLMap介绍 SQLMap是自动化的SQL注入工具 主要功能是扫描 发现并利用URL的SQL注入漏洞 内置了很多绕过插件 SQLMap采用了五种独特的SQL注入技术 如下 1 基于布尔类型的盲注
  • maven deploy 遇到 “方法不会覆盖或实现超类型的方法” 不要慌

    思考问题 这个bug看的我莫名其妙 看名字也看不懂说的啥 在网上看到说什么把 Override去掉就行了什么 我就觉得很奇怪 跟这个能有什么关系呢 网上既然说是跟 Override有关 那么这应该是是跟我实现的接口有关 后来发现是我在接口中
  • 【星海随笔】Windows 下 安装 Eclipse IDE 编辑 C++ Code

    首先下载Eclips https download csdn net download weixin 41997073 86727250 安装后 然后点点点就可以了 但要记住自己安装的路径 安装后 先认识一下这个工具 File可以创建项目
  • sublime vue 语法高亮插件安装

    转自 http www cnblogs com cosnyang p 6290950 html 默认情况下 Vue js 的单文件组件 vue 在 sublime 编辑器中是不被识别的 若要想高亮显示 需要安装插件 Vue Syntax H
  • No such operator image::read_file问题解决

    在学习动手学深度学习这门课的时候 在13 6 节 标检测数据集这一章遇到了问题 读取数据的时候报错 No such operator image read file 网上有人说问题在于pytorch版本和torchvision版本不对应 可
  • weixin-js-sdk使用

    注意 以下内容自身的项目为uniapp编译生成微信小程序 小程序内嵌webview 一 微信初始化 安装微信sdk npm install weixin js sdk save 页面引入 import wx from weixin js s
  • 构建高性能数据库缓存之Redis(一)

    一 Redis概述 1 1 什么是redis Redis是一个开源的用ANSI C编写 支持网络 基于内存 亦可持久化的日志型 Key Value数据库 根据DB Engines com站点月度排行的数据显示 Reidis是最流行的键值对存
  • SpringBoot整合MinIO

    文章目录 1 问题背景 2 前言 3 步骤 3 1 引入依赖 3 2 连接MinIO服务端的必要参数 3 3 代码实现文件上传功能 3 4 验证 1 问题背景 前面搭建了MinIO容器 现在来研究SpringBoot整合MinIO 2 前言
  • 并发编程基础知识(一)[进程篇]

    目录 一 程序的执行方式 1 进程是什么东西 2 进程与程序区别 3 进程状态 4 linux进程地址空间布局 5 linux下进程相关的API函数 1 创建一个新进程 2 进程退出 3 等待子进程退出 4 让一个进程去执行一个指定的程序文
  • 什么是迁移学习(Transfer Learning)?【精讲+代码实例】

    文章目录 1 Introduction 2 Development of Machine Learning 3 What is transfer learning 4 How to transfer 4 1 Example 1 物体识别 4
  • UE4 C++ 类的4种引用类型,和异步加载资产

    UE4 C 类的4种引用类型 和异步加载资产 4种引用类型 对象引用 引用 World 的实例对象 就是直接定义 UPROPERTY EditAnywhere BlueprintReadOnly Category My 对象引用 UWorl
  • Hive分组排序

    系统环境 Linux Ubuntu 16 04 jdk 7u75 linux x64 hive 1 1 0 cdh5 4 5 hadoop 2 6 0 cdh5 4 5 mysql 5 7 24 相关知识 Hive中支持多种分组操作 Ord
  • 【D-S证据理论】学习笔记

    Dempster Shafer证据理论学习笔记 引言 证据理论最早由Dempster提出主要用来解决不确定性问题的主要工具 后来被Shafer改进 现在被称为D S证据理论 D S证据理论的突出优势就是能够刻画信息的不确定性和未知性 该理论
  • 数字化转型战略下的数据安全问题及治理对策

    随着数字化转型在各行业的持续推进 数据作为生产的重要要素 其安全性日益受到关注 如何在数据安全各项法律法规的强监管下 确保企业业务合法 数据使用合规 业务有序发展成为当前全行业关注的焦点 本文将分析当前数字化转型背景下的数据安全现状 梳理存
  • 华三ftp服务器信息发布命令,h3cne命令行.doc

    h3cne命令行 PAGE13 NUMPAGES13 目 录 TOC o 1 3 h z u HYPERLINK l Toc283211304 1 常规系统维护 PAGEREF Toc283211304 h 2 HYPERLINK l To
  • 已知三角形的两点坐标,和三个边长,求第三点的坐标

    前几天做一个功能 实现N多圆球的碰撞时 写的该算法 代码比较容易 使用了三角形的余弦定理 算法是二维的 改成三维也容易 其实三维的我也实现过 用于骨骼动画的IK处理上 1 已知三角形的两点坐标 和三个边长 求第三点的坐标 2 bool Ca
  • 多数据源连接池

    做元数据管理 需要查询多个数据源的元数据 不用orm框架 直接用java实现 如下 主要有几个重要的类 MultiPool 连接池 ConnectionManager 连接管理器 DBConenction 数据库连接对象 1 MultiPo