引言

        Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。

        Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入 了日志监控。

        Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

        Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

        Spring Boot 2.0 以上默认使用 HikariCP 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀 的数据源。

Github地址:https://github.com/alibaba/druid/

中文参考地址:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E 9%A2%98

一,数据库连接池

1.1,什么是数据据库连接池

        连接池是一种常用的技术,为什么需要连接池呢?这个需要从TCP说起。假如我们的服务器跟数据库没 有部署在同一台机器,那么,服务器每次查询数据库都要先建立连接,一般都是TCP链接,建立连接就需要3 次握手了,假设后台服务跟数据库的单程的访问时间需要10ms,那么光是建立连接就花了30ms,并且TCP 还有慢启动的机制,实际上一次查询可能还不止1次TCP来回,查询效率就会大大降低。

1.2,什么要使用数据库连接池

        为了解决上述问题,我们就需要维护一些长链接,这样就不用每次都去建立连接,毕竟建立连接除了占 用时间,还需要一些其他的系统资源。另外的好处,连接池让我们更加容易地管理,一方面是可以避免数据 库资源都被某几个API占据,另一方面也可以避免资源泄露。

1.3,常用的连接池组件

  • c3p0
  • dbcp pool dbcp2
  • tomcat servlet容器,也内置一个连接池(dbcp)
  • druid 国内项目推荐使用此连接池,排行第一
  • HikariCP springboot 默认推荐

二,Druid使用

1.建立pom.xml配置maven依赖

到maven仓库搜寻源码依赖:Maven Repository: com.alibaba » druid » 1.2.20 (mvnrepository.com)

<!-- com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.20</version>
</dependency>

2.创建.properties的配置文件

在属性配置文件中配置如下: 

//JDBC驱动的名字
driverClassName=com.mysql.cj.jdbc.Driver
//连接字符串
url=jdbc:mysql://localhost:3306/files
//数据库的用户名
username=root
//数据库密码
password=123
//程序启动时默认创建的数据库连接数
initialSize=10
//如果连接数大于intitialSize的数后创建的最大连接数
maxActive=20

3.创建java类使用druid连接数据库


public class DruidSample {
    public static void main(String[] args) {
        //1.加载属性文件
        Properties properties=new Properties();
        //DruidSample.class.getResource("src/druidConfig.properties")表示获取
        // 当前DruidSample类路径下的属性文件的路径
        String propertyFile=DruidSample.class.getResource("/druidConfig.properties").getPath();
        try {
            //读取配置文件
            properties.load(new FileInputStream(propertyFile));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐