您的位置:首页 > 产品设计 > UI/UE

淘宝druid数据库连接池使用示例

2016-07-18 12:29 423 查看
参考:

淘宝连接池Druid  http://www.zhurouyoudu.com/index.php/archives/635/
http://code.alibabatech.com/wiki/display/Druid/Home
druid使用 http://blog.csdn.net/yunnysunny/article/details/8657095


Mybatis整合Druid和H2嵌入式数据库 http://my.oschina.net/u/580483/blog/91435

druid-0.2.19.jar只支持JDK1.6以上

DataSourceUtil

[java] view
plain copy

package taobao_druid;  

  

import java.io.BufferedInputStream;  

import java.io.File;  

import java.io.FileInputStream;  

import java.io.IOException;  

import java.io.InputStream;  

import java.util.Properties;  

  

import javax.sql.DataSource;  

  

import com.alibaba.druid.pool.DruidDataSourceFactory;  

  

/** 

 * The Class DataSourceUtil. 

 */  

public class DataSourceUtil {  

  

    /** 使用配置文件构建Druid数据源. */  

    public static final int DRUID_MYSQL_SOURCE = 0;  

  

    /** 使用配置文件构建Dr
20000
uid数据源. */  

    public static final int DRUID_MYSQL_SOURCE2 = 1;  

  

    /** 使用配置文件构建Dbcp数据源. */  

    public static final int DBCP_SOURCE = 4;  

    public static String confile = "druid.properties";  

    public static Properties p = null;  

  

    static {  

        p = new Properties();  

        InputStream inputStream = null;  

        try {  

            //java应用  

            confile = DataSourceUtil.class.getClassLoader().getResource("").getPath()  

                    + confile;  

            System.out.println(confile);  

            File file = new File(confile);  

            inputStream = new BufferedInputStream(new FileInputStream(file));  

            p.load(inputStream);  

        } catch (Exception e) {  

            e.printStackTrace();  

        } finally {  

            try {  

                if (inputStream != null) {  

                    inputStream.close();  

                }  

            } catch (IOException e) {  

                e.printStackTrace();  

            }  

        }  

    }  

  

    /** 

     * 根据类型获取数据源 

     *  

     * @param sourceType 

     *            数据源类型 

     * @return druid或者dbcp数据源 

     * @throws Exception 

     *             the exception 

     */  

    public static final DataSource getDataSource(int sourceType) throws Exception {  

        DataSource dataSource = null;  

        switch (sourceType) {  

        case DRUID_MYSQL_SOURCE:  

            dataSource = DruidDataSourceFactory.createDataSource(p);  

            break;  

        case DRUID_MYSQL_SOURCE2:  

            dataSource = DruidDataSourceFactory.createDataSource(p);  

            break;  

        case DBCP_SOURCE:  

            // dataSource = BasicDataSourceFactory.createDataSource(  

            // MySqlConfigProperty.getInstance().getProperties());  

            break;  

        }  

        return dataSource;  

    }  

}  

TableOperator

[java] view
plain copy

package taobao_druid;  

  

import java.sql.Connection;  

import java.sql.PreparedStatement;  

import java.sql.SQLException;  

import java.sql.Statement;  

  

import javax.sql.DataSource;  

  

public class TableOperator {  

    private DataSource dataSource;  

  

    public void setDataSource(DataSource dataSource) {  

        this.dataSource = dataSource;  

    }  

  

    private static final int COUNT = 5;  

  

    public TableOperator() {  

    }  

  

    public void tearDown() throws Exception {  

        try {  

            dropTable();  

        } catch (SQLException e) {  

            e.printStackTrace();  

        }  

    }  

  

    public void insert() throws Exception {  

        StringBuffer ddl = new StringBuffer();  

        ddl.append("INSERT INTO t_big (");  

        for (int i = 0; i < COUNT; ++i) {  

            if (i != 0) {  

                ddl.append(", ");  

            }  

            ddl.append("F" + i);  

        }  

        ddl.append(") VALUES (");  

        for (int i = 0; i < COUNT; ++i) {  

            if (i != 0) {  

                ddl.append(", ");  

            }  

            ddl.append("?");  

        }  

        ddl.append(")");  

        Connection conn = dataSource.getConnection();  

        System.out.println(ddl.toString());  

        PreparedStatement stmt = conn.prepareStatement(ddl.toString());  

        for (int i = 0; i < COUNT; ++i) {  

            stmt.setInt(i + 1, i);  

        }  

        stmt.execute();  

        stmt.close();  

        conn.close();  

    }  

  

    private void dropTable() throws SQLException {  

        Connection conn = dataSource.getConnection();  

        Statement stmt = conn.createStatement();  

        stmt.execute("DROP TABLE t_big");  

        stmt.close();  

        conn.close();  

    }  

  

    public void createTable() throws SQLException {  

        StringBuffer ddl = new StringBuffer();  

        ddl.append("CREATE TABLE t_big (FID INT ");  

        for (int i = 0; i < COUNT; ++i) {  

            ddl.append(", ");  

            ddl.append("F" + i);  

            ddl.append(" varchar2(10)");  

        }  

        ddl.append(")");  

        Connection conn = dataSource.getConnection();  

        Statement stmt = conn.createStatement();  

        System.out.println(ddl.toString());  

        stmt.execute(ddl.toString());  

        stmt.close();  

        conn.close();  

    }  

}  

MutilThreadTest

[java] view
plain copy

package taobao_druid;  

  

import java.sql.SQLException;  

import java.util.ArrayList;  

import java.util.List;  

import java.util.concurrent.Callable;  

import java.util.concurrent.ExecutorService;  

import java.util.concurrent.Executors;  

import java.util.concurrent.Future;  

import java.util.concurrent.TimeUnit;  

  

public class MutilThreadTest {  

  

    public static void main(String argc[]) throws Exception {  

        //        test(DataSourceUtil.DBCP_SOURCE, 50);  

        test(DataSourceUtil.DRUID_MYSQL_SOURCE, 50);  

    }  

  

    public static void test(int dbType, int times) throws Exception {  

        int numOfThreads = Runtime.getRuntime().availableProcessors() * 2;  

        ExecutorService executor = Executors.newFixedThreadPool(numOfThreads);  

        final TableOperator test = new TableOperator();  

        // int dbType = DataSourceUtil.DRUID_MYSQL_SOURCE;  

        // dbType = DataSourceUtil.DBCP_SOURCE;  

        test.setDataSource(DataSourceUtil.getDataSource(dbType));  

  

        boolean createResult = false;  

        try {  

            test.createTable();  

            createResult = true;  

        } catch (SQLException e) {  

            e.printStackTrace();  

        }  

        if (createResult) {  

            List<Future<Long>> results = new ArrayList<Future<Long>>();  

            for (int i = 0; i < times; i++) {  

                results.add(executor.submit(new Callable<Long>() {  

                    @Override  

                    public Long call() throws Exception {  

                        long begin = System.currentTimeMillis();  

                        try {  

                            test.insert();  

                            // insertResult = true;  

                        } catch (Exception e) {  

                            e.printStackTrace();  

                        }  

                        long end = System.currentTimeMillis();  

                        return end - begin;  

                    }  

                }));  

            }  

            executor.shutdown();  

            while (!executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS))  

                ;  

  

            long sum = 0;  

            for (Future<Long> result : results) {  

                sum += result.get();  

            }  

  

            System.out.println("---------------db type " + dbType  

                    + "------------------");  

            System.out.println("number of threads :" + numOfThreads + " times:"  

                    + times);  

            System.out.println("running time: " + sum + "ms");  

            System.out.println("TPS: " + (double) (100000 * 1000)  

                    / (double) (sum));  

            System.out.println();  

            try {  

                //                test.tearDown();  

                // dropResult = true;  

            } catch (Exception e) {  

                e.printStackTrace();  

            }  

        } else {  

            System.out.println("初始化数据库失败");  

        }  

  

    }  

  

}  

src下druid.properties:

[java] view
plain copy

driverClassName=oracle.jdbc.driver.OracleDriver  

url=jdbc:oracle:thin:@192.168.97.51:1521:lc8  

username=admin8  

password=adminpwd8  

filters=stat  

initialSize=2<
b9c0
/span>  

maxActive=300  

maxWait=60000  

timeBetweenEvictionRunsMillis=60000  

minEvictableIdleTimeMillis=300000  

validationQuery=SELECT 1  

testWhileIdle=true  

testOnBorrow=false  

testOnReturn=false  

poolPreparedStatements=false  

maxPoolPreparedStatementPerConnectionSize=200  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: