`
hengxing2009
  • 浏览: 89190 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
数据源技术是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