数据源与连接池

本文详细介绍了数据源的概念,包括JNDI、Apache DBCP和C3P0等数据源配置,并探讨了数据库连接池的重要性。通过示例展示了在Tomcat和Weblogic中配置全局数据源的方法,强调了数据库连接池如DBCP在管理和维护数据库连接中的作用。
摘要由CSDN通过智能技术生成

背景

十一之后需要apply VPD到我们的项目中,在每一次数据库查询前,进行一次存储过程调用修改上下文。这样,VPD利用上下文中的变量值对查询结果遍历。因此需要对所有用到的JPA实现做一下整理,包括数据源。

我们知道JDBC查询的时候都是需要四个步骤:

1. 加载数据库驱动
2. 获取数据库连接
3. 查询

4. 释放连接,遍历查询结果。

我们要做的就是在第3步查询前,先call 一次存储过程。这个就显得修改量大了。

我们知道,建立一个数据库连接是一个非常耗时耗资源的事情,因此很多容器都提供了数据库连接池的概念。而这些连接池都是绑定到数据源的。因此就要选择一个合适的地方进行存储过程调用。先解释下数据源。

数据源

所谓数据源也就是数据的来源。它存储了所有建立数据库连接需要的信息。算是对数据库的一个抽象映射,即一个数据源对于一个数据库。

数据源有以下属性
1. databaseName String数据库名称,即数据库的SID。
2. dataSourceName String数据源接口实现类的名称。
3. description String 对数据源的描述。
4. networkProtocol String 和服务器通讯使用的网络协议名。
5. password String 用户登录密码。
6. portNumber数据库服务器使用的端口。
7. serverName String数据库服务器名称。
8. user String 用户登录名。

如果数据是水,数据库就是水库,数据源就是连接水库的管道,终端用户看到的数据集是管道里流出来的水。

Java Web服务器开始时,我们用的最多的数据源是JNDI。

JNDI

JNDI(Java Naming and Directory Interface)即Java命名和目录接口,是Java API的一部分。JNDI相当于在应用与实际数据源间加了一层,这利用它跟数据库提供者进行交互,在一定程度上将应用与实际数据源进行了分离。因为
另外,JNDI是J2EE的标准的一部分,因此就要求所有的J2EE容器都必须提供一个JNDI的服务。

JNDI的API 位于 javax.naming包下面。比如可以通过以下方法查询数据源:

    public void getDataResource() throws NamingException {
        Context context = new InitialContext();
        DataSource ds = (DataSource) context.lookup("jdbc/dpt");
    }

打开源码就会发现JNDI的类分五个目录:

包名 用途  
javax.naming 例访问命名服务的类和接口.
如Context接口,这是命名服务执行查询的入口。
 
javax.naming.directory 对命名包的扩充,提供了访问目录服务的类和接口。
例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,
还定义了检查和更新目录对象的属性的方法。
 
javax.naming.event 提供了对访问命名和目录服务时的事件通知的支持。
例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件.
定义了侦听NamingEvents的NamingListener接口。
 
javax.naming.ldap 该包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。  
javax.naming.spi 该包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。
这个包是为有兴趣创建服务提供者的开发者提供的。
 

数据源配置

JNDI

先看下,在服务器中怎么配置JNDI的数据源。

我们知道,在JPA中,持久化单元(persistence-unit)跟数据源是一一映射的。

一个JNDI数据源如下(比如:applicationContext.xml)

	<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="SPDS" />
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值