Druid数据源的使用,案例加源码解析,推荐看一下~~

本文介绍了如何配置和使用Druid数据源,通过分析DruidDataUtils工具类和DruidDataSource工厂类的源码,揭示了数据源对象的创建过程。内容包括配置文件的设置,以及DruidDataSource如何根据配置信息初始化。在DAO层,利用JdbcTemplate进行数据库CRUD操作。最后探讨了DataSource接口与DruidDataSource的关系。

**

配置文件

**

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=9672005
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

配置工具类DruidDataUtils

**package cn.rong.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DruidDataUtils {
   
   
    //创建数据源
    private  static DataSource ds = null;
    static {
   
   
        //加载配置文件
        Properties properties = new Properties();
        try {
   
   
            properties.load(DruidDataUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //通过工厂类得到数据源对象
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
   
   
            e.printStackTrace();
        }
    }
    //得到连接对象
    public  static Connection getConnection(){
   
   
        Connection connection = null;
        try {
   
   
            connection = ds.getConnection();
        } catch (SQLException throwables) {
   
   
            throwables.printStackTrace();
        }
        return connection;
    }

    //归还连接对象到连接池中
    public static  void close(Connection connection){
   
   
        if(connection!=null) {
   
   
            try {
   
   
                connection.close();
            } catch (SQLException throwables) {
   
   
                throwables.printStackTrace();
            }

        }
    }

    public static  void close(Statement statement , Connection connection){
   
   
        if(statement!=null) {
   
   
            try {
   
   
                statement.close();
            } catch (SQLException throwables) {
   
   
                throwables.printStackTrace();
            }
        }
        if(connection!=null) {
   
   
            try {
   
   
                connection.close();
            } catch (SQLException throwables) {
   
   
                throwables.printStackTrace();
            }

        }
    }

    public static  void close(ResultSet resultSet , Statement statement,Connection connection){
   
   
        if(resultSet!=null) {
   
   
            try {
   
   
                resultSet.close();
            } catch (SQLException throwables) {
   
   
                throwables.printStackTrace();
            }
        }
        close(statement,connection);
    }
    //得到连接池对象
    public  static  DataSource getDs(){
   
   
        if (ds != null){
   
   
            return ds;
        }
        System.out.println("配置路径不对");
        return null;
    }
}
**

那么我们是如何得到这个数据源对象的呢?

		   private  static DataSource ds = null;
        //通过工厂类得到数据源对象
        ds = DruidDataSourceFactory.createDataSource(properties);

查看工厂类的源代码,他调用了 createDataSource方法,返回一个DateSource类型

    public static DataSource createDataSource(Properties properties) throws Exception {
   
   
        return createDataSource((Map)properties);
    }

然后查看该方法:在该方法中 返回的是一个DruidDataSource 类型 但是她符合DataSource类型, 并且 调用了 config方法,

    public static DataSource createDataSource(Map properties) throws Exception {
   
   
        DruidDataSource dataSource = new DruidDataSource();
        config(dataSource, properties);
        return dataSource;
    }

查看config方法:

    public static void config(DruidDataSource dataSource, Map properties) throws SQLException {
   
   
        String value = null;
        value 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值