美文网首页
2-数据源和JDBC以及连接池的关系

2-数据源和JDBC以及连接池的关系

作者: liangxifeng833 | 来源:发表于2021-03-14 11:44 被阅读0次

    JDBC方式连接数据库的弊端

    连接池

    • 为了解决JDBC频繁连接数据库所造成的系统资源消耗,可以事先创建一些连接备用;
    • 当需要时,从这些连接中选择一个提供出去;
    • 当连接使用完毕后,并不是真正的关闭,而是将这些数据状态还原,然后继续等待下一个人使用;

    DataSource

    • 数据源DataSource作为中间层DriverManager生成的连接,组织到连接池中,然后从池中提供连接
    • DataSource中获取的连接来自于连接池中,而池中的连接根本也还是从DriverManager获取而来;
    • 对外呈现DataSource就是类似于DriverManager的一个存在。
      image.png

    DataSource的形式是JNDI (Java Naming Directory Interface)

    • DataSource是JNDI资源的一种;
    • 可以简单的认为JNDI是一个哈希表,类型为<String,Object>
    • JNDI的两个最主要操作:bindlookup。bind操作负责往哈希表里存对象,lookup则根据这个键值字符串往外取对象。
    • 开发人员可以使用键值——也就是一个字符串名称——来获取某个对象。
    • 简言之就是可以给一个对象命名,然后可以通过名称找到这个对象。
    • 目前JBoss和各个数据库连接池提供了JNDI的支持。只不过数据库连接池厂商除了提供JNDI的方式外,还提供了各自更加简便的方式而已,我们目前使用的大部分是数据库连接池厂商各自简便的方式。

    数据源DataSrouce的具体实现

    • 关于数据源有以下几个核心的接口
    • CommonDataSource 接口定义了DataSource、XADataSourceConnectionPoolDataSource 之间公用的方法。
    • DataSource 是官方定义的获取 connection 的接口;
    • ConnectionPoolDataSource 是官方定义的从 connection pool连接池 中拿 connection 的接口;
    • XADataSource是定义的用来获取分布式事务连接的接口
    • 也就是分为了三个方向,基本实现,连接池,事务;
      image.png
      image.png

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

    • 基本实现 : 生成标准的 Connection 对象
    • 连接池实现: 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
    • 分布式事务实现: 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用, 分布式事务Transation对象资源类图如下:(可以请清晰的看到,分布式事务XADataSrouce获取XAConnection也是从数据库连接池中获取的)
      image.png

    总结:

    • 因为JDBC每次获取连接都需要创建数据库连接,所以使用DataSource代替JDBC,应用程序使用DataSource接口方式操作数据库。
    • DataSourceJDBC的DriverManger方式穿件数据库连接,并讲数据库连接放入连接池中,用户获取数据库连接的时候只需要DataSource.getConnection()从数据库连接池中获取即可。
    • DataSource初始化的时候就默认创建多个数据库连接,放入连接池中。
    • 总之一句话:DataSource作为JDBC DriverManger的替代品,它的底层实现依然是DriverManger, 只不过DataSource除了基本的数据库连接外,拥有更多的功能:连接池,分布式事务等。

    参考文章:Data Source与数据库连接池简介 JDBC简介(八)

    相关文章

      网友评论

          本文标题:2-数据源和JDBC以及连接池的关系

          本文链接:https://www.haomeiwen.com/subject/nllqcltx.html