`

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
分享到:
评论

相关推荐

    JDBC数据源连接池的配置和使用示例

    **JDBC数据源连接池配置与使用详解** 在Java Web应用中,数据库连接的管理是至关重要的。为了提高性能和资源利用率,开发人员通常会使用数据源连接池。本篇文章将详细讲解JDBC数据源连接池的配置和使用,以帮助你更...

    Java Web JDBC数据源.docx

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

    通过Spring Boot配置动态数据源访问多个数据库的实现代码

    * datasource:自己实现的数据源管理逻辑 * dbmgr:管理了项目编码与数据库IP、名称的映射关系 * mapper:数据库访问接口 * model:映射模型 * rest:微服务对外发布的restful接口 * application.yml:配置了数据库...

    SpringBoot整合Sharding-JDBC,实现从数据库加载sharding-jdbc数据源,实现多种数据库数据源切换,数据库方言动态切换

    本篇将详细介绍如何在SpringBoot项目中整合Sharding-JDBC,实现在运行时动态地从数据库加载数据源,以及实现数据库方言的动态切换。 首先,Sharding-JDBC提供了两种使用模式:标准版和代理版。在标准版中,Sharding...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    AtomikosDataSource是基于Atomikos实现的XAPool,可以协调跨多个数据源的ACID(原子性、一致性、隔离性和持久性)事务。在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 ...

    tomcat下配置jdbc数据源

    ### Tomcat下配置JDBC数据源详解 #### 一、引言 在Java Web开发中,JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它为数据库开发提供了一种统一的方式。而在实际应用中,为了提高程序...

    SpringBoot整合JDBC&Druid;数据源示例

    在本文中,我们将深入探讨如何在SpringBoot项目中整合JDBC和Druid数据源,并创建一个具有监控功能的示例。SpringBoot以其简洁的配置和快速的开发能力,深受Java开发者喜爱。而Druid作为一款优秀的数据库连接池,提供...

    WAS创建JDBC及数据源.

    点击刚创建的数据源“Oracle JDBC Driver DataSource”,然后在“组件管理认证别名”选择刚创建的 J2C 认证。 通过以上步骤,我们可以成功地创建 JDBC 及数据源,并实现对数据库的访问控制。这种方式可以提高应用...

    JDBC DruidDataSource dataSource = new DruidDataSource();

    而`DruidDataSource`是阿里巴巴开源的数据库连接池组件,它是JDBC的一个扩展,为应用程序提供了更高效、更稳定的数据源管理。 `DruidDataSource`相比于其他常见的数据源如C3P0、DBCP等,有着诸多优势。首先,`Druid...

    SpringBoot配置多数据源实现动态切换数据源

    SpringBoot实现多数据源主要依靠Spring的`@Configuration`和`@DataSourceConfiguration`注解,以及Spring JDBC的`DataSource`接口。下面是一个基本的配置示例: ```java @Configuration public class ...

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

    在SpringBoot项目中,整合Mybatis-Plus并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...

    sharding-jdbc多数据源,实现读写分离

    Sharding-JDBC作为一款轻量级的Java框架,提供了对多数据源和读写分离的支持,帮助开发者轻松实现这一目标。本文将深入探讨如何利用Sharding-JDBC在MySQL环境下设置多数据源,实现读写分离。 首先,我们了解下**...

    spring boot AOP注解方式实现多数据源

    在Spring Boot中,AOP(面向切面编程)和多数据源的整合是常见的应用场景,尤其是在大型企业级项目中,为了实现数据的隔离或者优化数据库访问,常常需要配置多个数据源。本文将深入探讨如何使用Spring Boot的AOP注解...

    spring boot多数据源配置

    本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到Mapper和Controller的整合。 一、配置多数据源 1. 引入依赖 首先,我们需要在`pom.xml`或`build.gradle`文件中添加相应的Spring ...

    spring-boot-jdbc多数据源的demo

    总的来说,这个示例涵盖了Spring Boot中使用JDBC操作多数据源的基本步骤,包括配置、创建DataSource、JdbcTemplate实例以及在业务逻辑中选择数据源。这样的设计使得在处理复杂数据库环境时,能够更加灵活和高效。

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两个不同的数据源。在`application.properties`或`application.yml`中,为每个数据源定义不同的数据库连接信息,例如: ```...

    SpringBoot + mybatis-plus + druid 实现mySql与Orcl双数据源

    接下来,我们将深入探讨如何使用这些技术实现双数据源配置。 首先,我们需要在SpringBoot项目中引入相关的依赖。对于MySQL,我们需要添加SpringBoot对JDBC的支持以及Mybatis-Plus的依赖。对于Oracle,除了JDBC支持...

Global site tag (gtag.js) - Google Analytics