Spring配置第三方连接池

Spring配置第三方连接池
jwangSpring配置C3P0连接池
官网:http://www.mchange.com/projects/c3p0/
步骤:
- 导入c3p0的坐标
- 注册连接池(修改DataSource的class以及四个基本项)
实现:
- 导入坐标
<dependency> |
- 配置数据源连接池
<!-- 配置C3P0数据库连接池 --> |
核心类:`com.mchange.v2.c3p0.ComboPooledDataSource
Spring配置Druid连接池
步骤:
- 导入Druid坐标
- 修改DataSource的class(四个基本项)
实现:
导入坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>配置数据源连接池
<!--注册dataSource --> |
Spring配置HikariCP连接池
官网:https://github.com/brettwooldridge/HikariCP
步骤:
- 添加HikariCP坐标
- 修改DataSource的class(四个基本项)
实现:
导入HikariCP坐标
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.1.0</version>
</dependency>配置数据源连接池
<!-- 配置HikariCP数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="jdbcUrl" value="jdbc:mysql:///spring_jdbc" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>核心类:
com.zaxxer.hikari.HikariDataSource- 为什么HikariCP为什么越来越火?
- 效率高
- 一直在维护
- SpringBoot2.0 现在已经把HikariCP作为默认的连接池了
- 为什么HikariCP为什么越来越火?
为什么HikariCP被号称为性能最好的Java数据库连接池?
优化并精简字节码: HikariCP利用了一个第三方的Java字节码修改类库Javassist来生成委托实现动态代理
优化代理和拦截器:减少代码,代码量越少。一般意味着运行效率越高、发生bug的可能性越低.
自定义集合类型ConcurrentBag:ConcurrentBag的实现借鉴于C#中的同名类,是一个专门为连接池设计的lock-less集合,实现了比LinkedBlockingQueue、LinkedTransferQueue更好的并发性能。ConcurrentBag内部同时使用了ThreadLocal和CopyOnWriteArrayList来存储元素,其中CopyOnWriteArrayList是线程共享的。ConcurrentBag采用了queue-stealing的机制获取元素:首先尝试从ThreadLocal中获取属于当前线程的元素来避免锁竞争,如果没有可用元素则再次从共享的CopyOnWriteArrayList中获取。此外,ThreadLocal和CopyOnWriteArrayList在ConcurrentBag中都是成员变量,线程间不共享,避免了伪共享(false sharing)的发生。
- 使用FastList替代ArrayList: FastList是一个List接口的精简实现,只实现了接口中必要的几个方法。JDK ArrayList每次调用get()方法时都会进行rangeCheck检查索引是否越界,FastList的实现中去除了这一检查,只要保证索引合法那么rangeCheck就成为了不必要的计算开销(当然开销极小)。



