`

JDBC数据源(DataSource)的简单实现

阅读更多
数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

数据源提供了一种简单获取数据库连接的方式,并能在内部通过一个池的机制来复用数据库连接,这样就大大减少创建数据库连接的次数,提高了系统性能。

对于数据源的应用,一般都选择实用开源的数据源或数据库连接池来使用,比如,常见的有DBCP、C3P0、Proxool等等。但用起来有些笨重和麻烦。下面自己手动实现个精简的数据源,代码如下:

package com.lavasoft.simpledatesource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.sql.DataSource;
import java.util.Collections;
import java.util.LinkedList;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.io.PrintWriter;

/**
* 一个简单的DataSource实现
*
* @author leizhimin 2010-1-14 0:03:17
*/
public class SimpleDateSource implements DataSource {
        private static Log log = LogFactory.getLog(SimpleDateSource.class);
        private static final String dirverClassName = "com.mysql.jdbc.Driver";
        private static final String url = "jdbc:mysql://127.0.0.1:3306/testdb";
        private static final String user = "root";
        private static final String pswd = "leizhimin";
        //连接池
        private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections.synchronizedList(new LinkedList<Connection>());
        private static SimpleDateSource instance = new SimpleDateSource();

        static {
                try {
                        Class.forName(dirverClassName);
                } catch (ClassNotFoundException e) {
                        log.error("找不到驱动类!", e);
                }
        }

        private SimpleDateSource() {
        }

        /**
         * 获取数据源单例
         *
         * @return 数据源单例
         */
        public SimpleDateSource instance() {
                if (instance == null) instance = new SimpleDateSource();
                return instance;
        }

        /**
         * 获取一个数据库连接
         *
         * @return 一个数据库连接
         * @throws SQLException
         */
        public Connection getConnection() throws SQLException {
                synchronized (pool) {
                        if (pool.size() > 0) return pool.removeFirst();
                        else return makeConnection();
                }
        }

        /**
         * 连接归池
         *
         * @param conn
         */
        public static void freeConnection(Connection conn) {
                pool.addLast(conn);
        }

        private Connection makeConnection() throws SQLException {
                return DriverManager.getConnection(url, user, pswd);
        }

        public Connection getConnection(String username, String password) throws SQLException {
                return DriverManager.getConnection(url, username, password);
        }

        public PrintWriter getLogWriter() throws SQLException {
                return null;
        }

        public void setLogWriter(PrintWriter out) throws SQLException {

        }

        public void setLoginTimeout(int seconds) throws SQLException {

        }

        public int getLoginTimeout() throws SQLException {
                return 0;
        }

        public <T> T unwrap(Class<T> iface) throws SQLException {
                return null;
        }

        public boolean isWrapperFor(Class<?> iface) throws SQLException {
                return false;
        }
}
这个数据源的实现虽然很简陋,总代码量不到百行,却基本上实现了数据源的所有功能,达到了提高Connection复用的目的。

如果你想做的更复杂些,做个配置文件,
配置数据库连接信息
写个后台线程监控连接池的Connection超时、被强制关闭、池的尺寸、当前大小等等。
再完善下数据源的log相关方法的实现。
功能就很强大了。

欢迎参与完善!
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/265073
分享到:
评论

相关推荐

    weblogic配置jdbc数据源

    weblogic配置jdbc数据源weblogic配置jdbc数据源weblogic配置jdbc数据源

    Java Web JDBC数据源.docx

    在这个配置文件中,我们可以看到的是使用了 javax.sql.DataSource 接口来定义数据源。 2. Context 配置:Context 配置是指 Tomcat 中的 Context 构件,它用于加载 Web 应用程序的配置信息。在这个配置文件中,我们...

    分库分表,多数据源的切换

    通过使用sharding-jdbc分库分表,以及多数据源的切换

    SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询.pdf

    SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询,案例以postgresql和oracle数据库为数据源,分别使用mybatis-plus分页插件和pagehelper分页插件实现分页查询。

    springboot双数据源

    双数据源 oracle mysql #数据源1 spring.datasource.db1.url=jdbc:mysql://192.168.1.1:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.db1.username=root spring.datasource....

    详细介绍在tomcat中配置数据源原理

    Tomcat 中配置数据源原理详解 在本文中,我们将详细介绍在 Tomcat 中配置数据源的原理。数据源是指Java应用程序连接数据库的接口,通过配置数据源,我们可以在 Java 应用程序中访问数据库。 首先, let's talk ...

    springboot2+两种方式:(读写分离、动态DataSource、事务懒处理)+sharding-jdbc.zip

    (1)、AbstractRoutingDataSource注册多数据源,AOP实现读写分离、读写源自动切换 (2)、一主多从,多个从库的负载均衡策略可以自定义。(双主多从、故障转移因mysql环境为一主一从,所以代码未实现,不难实现,...

    JBoss 下配置 Oracle 数据源

    在 JBoss 中配置 Oracle 数据源是实现企业级应用程序的重要步骤。本文将详细介绍如何在 JBoss 中配置 Oracle 数据源,包括复制配置文件、编辑配置文件、设置数据源参数等步骤。 一、复制配置文件 首先,我们需要将...

    dynamic-datasource+shardingsphere-jdbc实现分库分表demo

    博客 ...基于spring boot 2.7实现了dynamic-datasource+shardingsphere-jdbc+mybatis-plus技术栈的整合,可以动态切换数据源及对部分库表的分库分表。适用于老系统增加新的分库分表数据源。

    springboot多数据源快速启动器,基于 springBoot2.0

    一个简单能直接运行的项目基于 springBoot2.0. 它适用于读写分离,一主多从的环境。 主数据库使用 INSERT UPDATE DELETE 操作. 从数据库使用 SELECT 操作. 如果你的项目比较复杂,建议使用 sharding-jdbc .

    dynamic-datasource-spring-boot-starter-v3.5.1.zip

    Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...

    spring Ioc容器配置

    IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql:/...

    dynamic-datasource-spring-boot-starter-v3.5.1.tar.gz

    Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...

    DataSource接口介绍与使用

    JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制。

    Spring Data JDBC与JDBC的区别

     DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动  Connection:数据库连接  Statement:语句,执行SQL  PrepareStatement:预编译语句,性能更好  CallableStatement:调用存储过程  ...

    Tomcat6+spring+jndi配置数据源说明.docx

    Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理...本文档提供了详细的 Tomcat6+Spring+JNDI 配置数据源的步骤和原理,可以帮助开发者快速了解和实现数据源配置。

    JDBCDataSource:Spring 3 演示创建到 MySQL 数据库 (NetBeans IDE) 的 JDBC 驱动程序连接和数据源连接

    JDBC数据源 Spring 3 演示创建到 MySQL 数据库 (NetBeans IDE) 的 JDBC 驱动程序连接和数据源连接

    配置MSSQL数据源连接步骤

    配置MSSQL数据源连接步骤 [很卡,设置下了分辨率了] 1.打开MSSQL ,首先确定你这MSSQL是否为启动状态,从这看,应该是没有启动的 那好,现在启动SQL 好,现在已经启动 2.配置数据源 开始-&gt;控制面版-&gt;性能和维护...

    ssh框架在application.xml中配置数据源所需jar

    &lt;property name="dataSource"&gt; &lt;ref bean="dataSource" /&gt; ${hibernate.dialect} &lt;prop key="hbm2ddl.auto"&gt;update &lt;prop key="show_sql"&gt;true &lt;value&gt;...

Global site tag (gtag.js) - Google Analytics