讲解
1.Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。
Druid地址:https://github.com/alibaba/druid
DRUID连接池使用的jar包:druid-1.0.9.jar
2.Druid常用的配置参数解释:
jdbcUrl 连接数据库的url
username 数据库的用户名
password 数据库的密码
driverClassName 驱动类名。根据url自动识别,这一项可配可不配,如果不配置druid会根据url自动识别
initialSize 刚创建好连接池的时候连接数量
maxActive 连接池中最多可以放多少个连接
maxWait 获取连接时最大等待时间,单位毫秒
3.Druid(德鲁伊)的使用步骤:
1.下载jar,导包
druid-1.0.9.jar
2.复制配置文件到工程中 druid.properties
url=jdbc:mysql://localhost:3306/test
username=root
password=root
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
maxWait=2000
3.通过德鲁伊的工具类的静态方法获取数据源
DataSource DruidDataSourceFactory.createDataSource(Properties p)
/*未优化前的创建连接池的代码实现:*/
public class DruitDemo {
public static void main(String[] args) throws Exception {
//3.通过德鲁伊的工具类的静态方法获取数据源
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
//接口的多态
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
for (int i = 0; i < 11; i++) {
Connection connection = dataSource.getConnection();
System.out.println(i + "--" + connection);
if(i == 5){
connection.close();
}
}
}
}
4.druid工具类的使用:
1.druid获取步骤,封装在工具类中,重复
2.数据源不用创建多个,只需要创建一个,将数据源定义成私有的静态变量
3.druid数据源的赋值和配置文件的读取只需要执行一次,所以代码封装到静态代码块中
/*通过把连接池封装在一个工具类中进行调用,优化*/
public class druidUtil {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
//接口的多态
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//向外提供一个数据源
public static DataSource getDataSource(){
return dataSource;
}
//获取连接
public static Connection getConnection(){
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//资源释放
public static void release(ResultSet resultSet, Statement statement, Connection connection) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
resultSet = null;//避免内存泄漏
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
statement = null;//避免内存泄漏
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
connection = null;//避免内存泄漏
}
}
}