JDBC数据库连接池的实现:第一天:数据源配置解析工具

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:
开源的连接池很多,实现都不错,可是就不知道怎么做的,在研读了javax.sql包中的API规范后,想手动实现一个通用的JDBC数据库连接池。这个工作量比较大,主要目的是为了深入底层学习Java处理数据库的技术。
 
第一天:数据源配置解析工具
 
这个解析工具支持xml配置和properties配置,程序不依赖任何jdk以外的任何第三方包。
 
xml和properties文件的格式对名字有限制,xml还对格式有限制,要求符合sun公司的 [url]http://java.sun.com/dtd/properties.dtd[/url]规范。
 
解析工具要完成的功能,读取配置文件,并存放到Map中,对于非必须而没有配置的属性,给以默认的属性值。
 
要求:两种配置文件读取方法通用,不进行切换。有导出配置文件的功能。
 
实现代码:
package com.blog51cto.lavasoft.ds; 

import java.util.*; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
import java.io.InputStream; 

/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-3-19 23:22:38 
* Company: LavaSoft([url]http://lavasoft.blog.51cto.com[/url]) 
* 数据源配置工具 
*/
 
public  class DataSourceConfig { 
     private  static Map<String, String> defcfgmap; 

     //初始化默认配置参数 
     static { 
        defcfgmap =  new HashMap<String, String>(); 
        defcfgmap.put( "driverClassName", ""); 
        defcfgmap.put( "url", ""); 
        defcfgmap.put( "user", ""); 
        defcfgmap.put( "password", ""); 
        defcfgmap.put( "type""javax.sql.DataSource"); 
        defcfgmap.put( "initCreate""12"); 
        defcfgmap.put( "maxIdle""8"); 
        defcfgmap.put( "maxWait""10"); 
        defcfgmap.put( "maxActive""5"); 
        defcfgmap.put( "validationQuery", ""); 
    } 

     /** 
     * 获取数据源配置信息,本方法接受两种配置文件类型,xml和properties类型. 
     * 
     * @param cfgFilePath 配置文件的名 
     * @return 配置参数Map 
     * @throws Exception 
     */
 
     public  static Map<String, String> getConfigParameter(String cfgFilePath)  throws Exception { 
        Map<String, String> mcfg =  new HashMap<String, String>(); 
        Pattern pp = Pattern.compile( ".+properties"); 
        Pattern px = Pattern.compile( ".+xml"); 
        Matcher mp = pp.matcher(cfgFilePath); 
        Matcher mx = px.matcher(cfgFilePath); 
        InputStream in = DataSourceConfig. class.getResourceAsStream(cfgFilePath); 
        Properties prop =  new Properties(); 
         if (mp.matches()) { 
            prop.load(in); 
            Enumeration<String> enu = (Enumeration<String>) prop.propertyNames(); 
             while (enu.hasMoreElements()) { 
                String key = enu.nextElement(); 
                String value = prop.getProperty(key); 
                mcfg.put(key, value); 
            } 
            in.close(); 
        }  else  if (mx.matches()) { 
            prop.loadFromXML(in); 
            Enumeration<String> enu = (Enumeration<String>) prop.propertyNames(); 
             while (enu.hasMoreElements()) { 
                String key = enu.nextElement(); 
                String value = prop.getProperty(key); 
                mcfg.put(key, value); 
            } 
            in.close(); 
        }  else { 
             throw  new Exception( "数据源配置文件必须为xml或者properties文件,请检查配置!"); 
        } 
         //检查没有配置的属性,并通过默认的属性值进行设置 
        Set<Map.Entry<String, String>> def = defcfgmap.entrySet(); 
         for (Map.Entry<String, String> d : def) { 
             if (!mcfg.containsKey(d.getKey())) { 
                mcfg.put(d.getKey(), d.getValue()); 
            } 
        } 
         return mcfg; 
    } 

     /** 
     * 获取默认的数据源配置信息 
     * 
     * @return 
     */
 
     private  static String getDefaultConfig() { 
         return getConfig(defcfgmap); 
    } 

     /** 
     * 返回数据源配置信息的文本表述 
     * 
     * @param map 配置信息Map 
     * @return 数据源配置信息的文本表述 
     */
 

     private  static String getConfig(Map<String, String> map) { 
        StringBuffer sb =  new StringBuffer( "数据源配置参数:\n"); 
         for (Map.Entry<String, String> ent : map.entrySet()) { 
            sb.append(ent.getKey()).append( "=").append(ent.getValue()).append( "\n"); 
        } 
         return sb.toString(); 
    } 

     /** 
     * 测试配置参数获取工具 
     * 
     * @param args 
     * @throws Exception 
     */
 
     public  static  void main(String args[])  throws Exception { 
        Map<String, String> mcfg = getConfigParameter( "dscfg.xml"); 
        String cfg = getConfig(mcfg); 
        System.out.println(cfg); 
    } 
}
 
 
配置文件
dscfg.properties
driverClassName=com.mysql.jdbc.Driver 
url=jdbc:mysql://127.0.0.1:3306/mysql 
user=root 
password=leizhimin 
 
dscfg.xml
<? xml  version ="1.0"  encoding ="UTF-8" ?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
< properties > 
< comment >JDBC数据库连接池实现 </ comment > 
< entry  key ="user" >root </ entry > 
< entry  key ="password" >leizhimin </ entry > 
< entry  key ="url" >jdbc:mysql://127.0.0.1:3306/mysql </ entry > 
< entry  key ="driverClassName" >com.mysql.jdbc.Driver </ entry > 
</ properties >
 
 
现有的方法都测试过了,还没有写导出配置的方法,接下来我会补上。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/66960,如需转载请自行联系原作者
相关文章
|
4月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
448 93
|
3月前
|
SQL Java 数据库连接
除了JDBC,还有哪些常见的数据库访问技术?
除了JDBC,还有哪些常见的数据库访问技术?
364 2
|
7月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
355 1
|
6月前
|
数据可视化 BI API
无缝对接云数据库:自定义报表生成工具在混合云环境下的部署指南
自定义报表生成工具通过拖拽设计、多数据源整合及自动化输出,帮助业务人员零代码创建个性化报表,解决传统工具灵活性不足、技术门槛高的问题。文章对比其与传统报表差异,列举行业应用场景(如财务、零售),并给出选型建议与主流工具(如FineReport、Power BI、板栗看板)的优劣势分析。
268 0
|
4月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
511 7
|
4月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
722 5
|
4月前
|
人工智能 数据库 iOS开发
DBeaver Ultimate Edtion 25.2 发布 - 通用数据库工具
DBeaver Ultimate Edtion 25.2 Multilingual (macOS, Linux, Windows) - 通用数据库工具
552 0
|
7月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
494 3
Jasypt加密数据库配置信息
|
6月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
1138 0
|
6月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
537 0

推荐镜像

更多
  • DNS