2018-02-25 数据库优化---连接池技术

接池的核心思想是:一次性的批量的弄出多个连接对象放到连接池中,当需要操作数据库的时候,就从连接池中取出一个 链接 使用,当用完了连接 之后,再次将连接放回到池子中去,这样就避免了不断的创建连接, 不断的释放连接的过程,从而一定程序上显著的提高程序的性能.

2018-02-25_213745.png
  • MyDataSource.java 继承实现DataSource接口

javax.sql.DataSource;

public class MyDataSource implements DataSource {
    
    //因为这里做增删操作,所以要用linkedlist效率会高一点
    private LinkedList pool = new LinkedList();
    
    //自定义无参构造函数
    public MyDataSource() {
        
        //批量的弄一些连接,list中
        System.out.println("弄了10个链接");
        
        for (int i = 0; i < 10; i++) {
            
            Connection conn = JdbcUtils.getConnection();
            pool.add(conn);
            
        }
        
    }
    
    
    //通过这个方法可以返回一个连接
    @Override
    public Connection getConnection() throws SQLException {
        
        //判断是否有连接可用 
        if (pool.isEmpty()) {
            //再弄三个连接到池子里去
            for (int i = 0; i < 3; i++) {
                
                Connection conn = JdbcUtils.getConnection();
                
                pool.add(conn);
                
            }
        }
        
        //总是从池子中返回第一个连接
        Connection conn = pool.removeFirst();   
        
                
        //返回连接对象
        return conn;
    }
        .......
        .......
        .......
        .......
}
  • MyDataSourceTest.java实现调用方法
public class MyDataSourceTest {
    
    @Test
    public void test1() {
        
        Connection conn =null;
        PreparedStatement stmt=null;
        
        MyDateSource ds = null;
        
        try {
            
            
            ds = new MyDataSource();
            
            //获得连接
            //conn = JdbcUtils.getConnection();
                        //从连接池中取出连接对象
            conn = ds.getConnection();
            
             
            stmt = conn.prepareStatement("update account set money=? where name=?");
            stmt.setDouble(1, 99999);
            stmt.setString(2, "aaa");
            
            stmt.executeUpdate();
            
            
        } catch (Exception e) {
            
            e.printStackTrace();
            
        }finally {
            
            
            //将从连接池中取出的连接对象存回连接池中
            ds.addBack2Pool(conn);
            
            
            //释放资源,conn设置为空,防止连接被释放
            JdbcUtils.release(null, stmt, conn);
                        
        }
        
        
        
    }
    
}

你可能感兴趣的:(2018-02-25 数据库优化---连接池技术)