DataSource

该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。

DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

  1. 基本实现 - 生成标准的 Connection 对象
  2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
  3. 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。

DataSource 对象的属性在必要时可以修改。例如,如果将数据源移动到另一个服务器,则可更改与服务器相关的属性。其优点在于,由于可以更改数据源的属性,所以任何访问该数据源的代码都无需更改。

通过 DataSource 对象访问的驱动程序本身不会向 DriverManager 注册。通过查找操作获取 DataSource 对象,然后使用该对象创建 Connection 对象。使用基本的实现,通过 DataSource 对象获取的连接与通过 DriverManager 设施获取的连接相同。

连接池实现

数据库连接池:

 

结构如下图:

 


 

 

2  java提供类来让开发人员自定义实现数据库连接池: (一般都是用开源的数据库连接池)

 

2.0 自己编写连接池大概流程:


编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:
Connection getConnection() 
Connection getConnection(String username, String password)

 

开发的流程: 一次性从数据库中获取X个conn,然后将原始的conn(Connection)动态代理,然后将这些个conn放如到linkedlist保存,每次获取conn时去list获取,当在业务逻辑代码中执行释放资源时,将使用的动态代理的close将conn返回到list中。

public Object invoke(Object proxy, Method method, Object[] args)
						throws Throwable {
					
					if(method.getName().equals("close")){
						connections.addLast(conn);
						System.out.println(conn + "被还到池里了!!,池大小为:" + connections.size());
					}else{// 如果不是调用conn的close方法而是调用conn的其他方法那么我就调用mysql的conn把其他事情给干了
						return method.invoke(conn, args);
					}
2.1 市场上开源的连接池介绍(原理都是 1 维护X个数据库连接资源conn 2对原始conn实现动态代理,主要涉及两块 执行close时将conn返回到list 执行别的方法时交由原始conn执行)

使用Application Server 连接池
1, 连接池由Application Server实现
在 Server 上配置DB 信息
2,DataSource对象通常注册在JNDI命名服务上
3,从JNDI命名服务上获取DataSource对象
 一个DataSource对象通常注册在JNDI命名服务上,应用程序可以通过标准的方式获得到注册在JNDI服务上的DataSource对象。 代码如下: 
Context ctx = new InitialContext(); 
DataSource ds = (DataSource) ctx.lookup("jdbc/openbase");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值