十五、配置数据库连接池-整合Druid
MyBatis作为一个ORM框架,在进行数据库操作时是需要和数据库建立连接的,MyBatis支持基于数据库连接池的连接创建方式。
当我们配置MyBatis数据源时,只要配置了dataSource标签的type属性值为POOLED时,就可以使用MyBatis内置的连接池管理连接。
如果我们想要使用第三方的数据库连接池,则需进行自定义配置。
15.1 常见的连接池
- DBCP
- C3P0
- Druid 性能也比较好,提供了比较便捷的监控系统
- Hikari 性能最好
15.2 添加Druid依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
15.3 将MyBatis的连接池替换为Druid
在MyBatis的主配置文件中直接将type=“POOLED"改为“DruidDataSource”可以吗?不可以。
<dataSource type="DruidDataSource">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
因为type=“ ” 里面需要一个连接池工厂,PooledDataSourceFactory,也就是我还是需要一个POOLED数据源,否则里面的get、put等方法没法实现。
这里相当于一个多态,我需要一个PooledDataSourceFactory,那么它作为一个父类的话,它的子类能不能往里面传?可以。
所以我们可以在utils文件夹下新建一个类DruidDataSourceFactory,让它继承PooledDataSourceFactory:
public class DruidDataSourceFactory extends PooledDataSourceFactory {
public DruidDataSourceFactory(){
this.dataSource = new DruidDataSource();
}
}
它继承了PooledDataSourceFactory,而且通过构造方法将其中的dataSource改为了Druid自带的DruidDataSource。
再将DruidDataSourceFactory配置给数据源:
<dataSource type="com.wyl.utils.DruidDataSourceFactory">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
当我们把配置换为Druid的配置之后,下面的配置的name就不叫driver、url…了,而是要改为Druid的:
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="com.wyl.utils.DruidDataSourceFactory">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
运行一个测试类,看看日志信息,第三行实际上就是Druid打印出来的:
更多推荐