点击上方蓝色“后端面试那些事儿”,选择“设为星标”
学最好的别人,做最好的我们
一、概述
在日常项目中肯定需要用到数据源,那么数据源是什么,当遇到分布式事务的场景时数据源与非分布式事务场景的数据源又有什么不同呢,在J2EE中分布式事务又是如何实现的呢,希望本文可以解答您的疑惑。
二、 数据源
2.1 数据源是什么
通俗来讲,数据源是存储数据的地方。例如,数据库是数据源,其他系统也可以是数据源。在J2EE里,数据源是代表物理数据存储系统的实际Java对象。通过这些对象,J2EE应用可以获取到数据库的JDBC连接。
2.2 数据源的设计
![b3942cef52e5a53707db9fb4395915bf.png](https://i-blog.csdnimg.cn/blog_migrate/21fa793855bdfee3d7b9843e1c93a654.png)
ConnectionPooledconnectionXAConnectionCommonDataSourceDataSourceConnectionPoo1DataSourceXADataSource
从UML图上可以看出,CommonDaraSource是对数据源概念的顶层抽象,约束了数据源必须实现的方法。数据源有三种类型的实现,分别是:
- DataSource,基本实现,用于生成标准Connection对象
- ConnectionPoolDataSource,连接池实现,这个数据源并不会直接创建数据库物理连接,而是一个逻辑实现,它的作用在于池化数据库物理连接。由于数据库物理连接是一个重量级的对象,频繁的创建销毁很影响性能,将物理连接池化后可降低创建和销毁的频率,复用连接以充分利用连接资源。