数据源技术是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数据源
在这个配置文件中,我们可以看到的是使用了 javax.sql.DataSource 接口来定义数据源。 2. Context 配置:Context 配置是指 Tomcat 中的 Context 构件,它用于加载 Web 应用程序的配置信息。在这个配置文件中,我们...
* datasource:自己实现的数据源管理逻辑 * dbmgr:管理了项目编码与数据库IP、名称的映射关系 * mapper:数据库访问接口 * model:映射模型 * rest:微服务对外发布的restful接口 * application.yml:配置了数据库...
点击刚创建的数据源“Oracle JDBC Driver DataSource”,然后在“组件管理认证别名”选择刚创建的 J2C 认证。 通过以上步骤,我们可以成功地创建 JDBC 及数据源,并实现对数据库的访问控制。这种方式可以提高应用...
本文将详细讲解JDBC数据源连接池的配置和应用。 首先,让我们了解JDBC建立数据库连接的两种基本方式: 1. **使用DriverManager获得数据库连接**: 这是最基础的方法,程序员在代码中显式地加载驱动、创建连接。...
通过使用sharding-jdbc分库分表,以及多数据源的切换
通过配置数据库连接信息、数据源信息、多数据源及事物管理、持久层 DAO 的管理配置、Web.xml 中过滤器配置、DAO 实现类 EntityManager 注解修改、jdbc 数据源注解修改和 Service 实现类中事物注解修改,可以实现灵活...
SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询,案例以postgresql和oracle数据库为数据源,分别使用mybatis-plus分页插件和pagehelper分页插件实现分页查询。
3. **配置数据源路由**:为了能够在代码中动态选择数据源,我们需要实现一个数据源路由类,如`AbstractRoutingDataSource`。在这个类中,你可以根据业务逻辑或线程绑定变量来决定使用哪个数据源。 ```java public...
数据源是Java中用于存储数据库连接信息的接口,它实现了JDBC规范中的`javax.sql.DataSource`接口。通过数据源,我们可以获取到数据库连接,进行SQL查询和其他数据库操作。 配置多个数据源在Spring中主要分为以下几...
Tomcat 是一个流行的 Java Web 服务器,配置 JNDI 数据源可以实现数据库连接的复用和共享。 在 Tomcat 中,配置 JNDI 数据源有两种方式:单个应用独享数据源和全局 JNDI 数据源。 1. 单个应用独享数据源 在 ...
在JDBC中,数据源(DataSource)是一个关键概念,它是Java中用于存储数据库连接信息的接口,通常用于管理数据库连接池。数据源可以提高应用程序的性能,因为它可以重用已经建立的数据库连接,避免了频繁创建和关闭...
通过扩展这个类或直接配置路由规则,我们可以实现数据源的动态选择。 3. **配置多数据源**:在Spring的XML配置文件中,我们需要定义多个DataSource bean,分别代表不同的数据库连接。这些数据源可以是Apache ...
数据源(DataSource)是Java JDBC API中的一种接口(javax.sql.DataSource),它提供了一种创建和管理数据库连接的方法。数据源通过连接池来管理这些连接,避免了频繁创建和关闭连接的开销,从而提高了性能。数据源...
在Spring 1.2框架中,操作多个数据源是一项重要的功能,它允许应用程序根据需求灵活地切换或选择不同的...在实际项目中,还可以根据业务需求进行更复杂的定制,比如添加更多的数据源,或者实现更复杂的数据源选择策略。
首先,数据源(DataSource)是Java中用于管理数据库连接的接口,它遵循Java的JDBC API。常见的数据源实现有Apache Commons DBCP、C3P0、HikariCP等。在Java中,我们通常通过Java的Context和Initial LifeCycle(JNDI...
在Java编程语言中,数据源通常通过Java Database Connectivity (JDBC) API来实现。JDBC提供了一组标准接口,如DataSource,Connection,Statement等,用于与各种数据库进行交互。DataSource接口是连接池的常用实现,...
DataSource对象可以注册到名字服务中,应用程序可以通过名字服务获得DataSource对象,并用它来产生一个与DataSource代表的数据源之间的连接。系统管理员或者有相应权限的人可以配置DataSource对象,包括设定...
例如,在一些复杂的业务场景中,我们可能需要使用多个数据源来存储不同的数据,这时我们就需要使用多数据源配置方法来实现。 本文详细介绍了Spring Boot v2.0.3版本中多数据源配置方法的变化,并提供了解决异常的...