Spring整合数据库连接池

我们知道常用的数据库连接池大概有hikari, druid, tomcatjdbc, dbcp, c3p0。网上有很多对他们的性能和适用场景的分析。

这里简单说一下结论,从性能看hikari, druid, tomcatjdbc, dbcp, c3p0是依次递减的,其中c3p0基本上不建议大家使用了。

性能最好的是hikari,其次是druid,其中druid的优势在于还提供了性能监控。hikari则是号称最快的连接池,而且Springboot从2.x.x版本开始已经把它配置为默认的数据库连接池了。我们今天重点看一下druid和hikari如何整合。

整合druid

首先导入数据库驱动包和druid包依赖



    mysql
    mysql-connector-java
    5.1.6


    com.alibaba
    druid
    1.0.9

然后你需要在bean的配置文件里面配上数据源:

 
     
     
     
     
     
     
     
     
     
          


这里只写了最基础的连接配置参数,关于druid参数的连接配置参数,可以参考druid官网的说明。

测试类:

public class DruidDemo_1 {

    public static void main(String[] args){
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = DruidConnUtils.getConnection();

            String sql = "insert into account values(1,?,?)";
            pstmt = conn.prepareStatement(sql);

            pstmt.setString(1, "david");
            pstmt.setDouble(2, 3000);

            int count = pstmt.executeUpdate();

            System.out.println("SQL exec success, count is " + count);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DruidConnUtils.close(pstmt, conn);
        }
    }
}

Druid连接池的工具类:

public class DruidConnUtils {
    private static DataSource ds;

    static {
        try{
            Properties pro = new Properties();
            InputStream is = DruidConnUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //Druid连接池是通过工厂类DruidDataSourceFactory来获取的
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    //获取连接池
    public static DataSource getDataSource() {
        return ds;
    }

    //释放资源
    public static void close(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();   //将连接释放,归还到连接池
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    //释放资源
    public static void close(Statement stmt, Connection conn, ResultSet rs) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();   //将连接释放,归还到连接池
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

运行一下,正确的插入了一条记录:


image.png

在sql中查看到了这条记录:


image.png
整合hikari

hikari的配置和druid步骤是一样的,先导入数据库驱动和hikari包


    mysql
    mysql-connector-java
    5.1.6


    com.zaxxer
    HikariCP
    2.4.13


然后配置你的数据源:


      
      
      
      

      
      
      
      
      
      
      
      
      
      
      
      
   

参考资料:

https://www.cnblogs.com/L-tianyi/archive/2017/12/29/8143103.html

你可能感兴趣的:(Spring整合数据库连接池)