美文网首页
2018-02-25 数据库优化---连接池技术

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

作者: 紫杉叶子 | 来源:发表于2018-02-25 21:43 被阅读0次

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

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

    javax.sql.DataSource;

    public class MyDataSource implements DataSource {
        
        //因为这里做增删操作,所以要用linkedlist效率会高一点
        private LinkedList<Connection> pool = new LinkedList<Connection>();
        
        //自定义无参构造函数
        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 数据库优化---连接池技术

          本文链接:https://www.haomeiwen.com/subject/tshdxftx.html