文档章节

Spring DataSource

Rickxue
 Rickxue
发布于 2015/12/08 16:41
字数 811
阅读 38
收藏 0

何为DataSource

DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。 
作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。 
实现 DataSource 接口的对象通常在基于JNDI API 的命名服务中注册。

不管通过何种持久化技术,都必须通过数据连接访问数据库,在传统的应用中数据连接可以通过DriverManager获的, 
在Spring中,数据连接一般是通过数据源获得的。在以往的应用中,数据源一般是 Web应用服务器提供的。 
在Spring中,你不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源, 
此外,你还可以 通过代码的方式创建一个数据源,以便进行无依赖的单元测试。

DataSource API定义: 

package javax.sql;
 
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Wrapper;
 
public interface DataSource  extends CommonDataSource,Wrapper {
 
  Connection getConnection() throws SQLException;
   
  Connection getConnection(String username, String password) 
    throws SQLException;
}

在Spring中配置Datasource

1、JDBC

Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource , 
它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口, 
但它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。 
因此,这个数据源类比较适合在单元测试 或简单的独立应用中使用,因为它不需要额外的依赖类。

DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用。

Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0。 

2、DBCP 
DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakarta commons-pool对象池机制的数据库连接池, 所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。

dataSource = org.apache.commons.dbcp.BasicDataSource

BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 
以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性: 
defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true; 
defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false; 
maxActive:最大连接数据库连接数,设置为0时,表示没有限制; 
maxIdle:最大等待连接中的数量,设置为0时,表示没有限制; 
maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息; 
validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据; 
removeAbandoned:是否自我中断,默认是 false ; 
removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值; 
logAbandoned:是否记录中断事件, 默认为 false; 

3、C3P0

C3P0是一个开放源代码的JDBC数据源实现项目,C3P0类包位于Spring中lib/c3p0/c3p0-0.9.1.2.jar。

一般在下载hibernate的时候都会自带一个: 在hibernate-release-4.3.0.Final\lib\optional\c3p0路径下找到的。  


本文转载自:使用hibernate数据源 需要hiberante核心jar包,我使用的hibernate1的版本是hibernate-release-4.3.0.Final   目前三大框架较流行,s...

Rickxue
粉丝 5
博文 43
码字总数 16647
作品 0
程序员
私信 提问

暂无文章

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
18分钟前
4
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
19分钟前
2
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
21分钟前
4
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
25分钟前
3
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部