亲宝软件园·资讯

展开

数据源管理 | 基于JDBC模式,适配和管理动态数据源

知了一笑 人气:1
本文源码:[GitHub·点这里](https://github.com/cicadasmilehttps://img.qb5200.com/download-x/data-manage-parent) || [GitEE·点这里](https://gitee.com/cicadasmilehttps://img.qb5200.com/download-x/data-manage-parent) # 一、关系型数据源 ## 1、动态数据源 ![](https://img2020.cnblogs.com/blog/1691717/202004/1691717-20200407220621903-1604864869.png) 动态管理数据源的基本功能:数据源加载,容器维护,持久化管理。 ## 2、关系型数据库 不同厂商的关系型数据库,提供的链接方式,驱动包,驱动类名都是不一样的,Java数据库连接API,JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法,且适配大部分关系型数据库。 ## 3、适配要素 核心要素:驱动包、驱动类名、URL格式、默认端口。 关系型数据库很多,这里一定是不全的,根据需要自行完善即可。 ```java public enum DataSourceType { MySql("MySql", "com.mysql.jdbc.Driver"), Oracle("Oracle", "oracle.jdbc.OracleDriver"), DB2("DB2", "com.ibm.db2.jcc.DB2Driver"); private String dataSourceName; private String driverClassName; public static String getDriver (String dataSourceName) { DataSourceType[] types = DataSourceType.values(); for (DataSourceType type : types) { if (type.getDataSourceName().equals(dataSourceName)) { return type.getDriverClassName(); } } return null; } DataSourceType (String dataSourceName,String driverClassName){ this.dataSourceName = dataSourceName ; this.driverClassName = driverClassName ; } } ``` ## 4、JDBC基础API **DriverManager** 管理JDBC驱动程序的基本服务API。调用方法Class.forName,显式地加载驱动程序类,正好适用于动态数据源的业务场景,数据源类型未知情况。加载Driver类并在DriverManager类注册后,即可用来与数据库建立连接。 **DataSource** DataSource接口,由驱动程序供应商实现,负责建立与数据库的连接,当在应用程序中访问数据库时,常用于获取操作数据的Connection对象。 **Connection** Connection接口代表与特定的数据库的连接,要对数据库数据进行操作,首先要获取数据库连接,Connection实现就像在应用程序中与数据库之间开通了一条通道,通过DriverManager类或DataSource类都可获取Connection实例。 # 二、链接和管理 这里几个核心类的封装思路:模块化功能,API分开封装,如果需要适配处理各类数据源类型,则分别可以向上抽象提取,向下自定义适配策略,设计模式影响下的基本意识。 ## 1、链接工具 基于DriverManager管理数据源的驱动加载,链接获取等。 ```java public class ConnectionUtil { public static synchronized Connection getConnect(String driverClassName,String userName, String passWord,String jdbcUrl) { Properties prop = new Properties(); prop.put("user", userName); prop.put("password", passWord); return connect(driverClassName,prop,jdbcUrl) ; } private static synchronized Connection connect(String driverClassName, Properties prop,String jdbcUrl) { try { Class.forName(driverClassName); DriverManager.setLoginTimeout(JdbcConstant.LOGIN_TIMEOUT); return DriverManager.getConnection(jdbcUrl, prop); } catch (Exception e) { e.printStackTrace(); } return null ; } } ``` ## 2、API工具类 提供API配置获取类,加载需要的数据源API,关闭资源等基本操作。 ```java @Component public class JdbcConfig { /** * 获取数据源连接 */ public Connection getConnection (ConnectionEntity connectionEntity){ String dataTypeName = connectionEntity.getDataTypeName(); String driverClassName = DataSourceType.getDriver(dataTypeName) ; if (driverClassName == null){ throw new RuntimeException("不支持该数据源类型") ; } connectionEntity.setDriverClassName(driverClassName); return ConnectionUtil.getConnect(connectionEntity.getDriverClassName(), connectionEntity.getUserName(), connectionEntity.getPassWord(), connectionEntity.getJdbcUrl()) ; } } ``` ## 3、数据源容器 维护一个Map容器,管理数据源的添加,删除,动态获取等基本需求。 ```java @Component public class DataSourceFactory { private volatile Map

加载全部内容

相关教程
猜你喜欢
用户评论