十五、配置数据库连接池-整合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打印出来的:

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐