• Java与Scala的两种简易版连接池


    Java版简易版连接池:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.LinkedList;
    
    /**
     * 简易版的连接池
     */
    public class ConnectionPool {
        //静态的Connection
        private static LinkedList<Connection>connections;
        //加载驱动
        static {
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        //获取连接   多线程访问并发问题控制
        public  synchronized static Connection getConnectoin(){
            try {
                if (connections==null){
                    connections=new LinkedList<Connection>();
                    for (int i =0;i<10;i++){
                        Connection conn=DriverManager.getConnection(
                                "jdbc:mysql://localhost:3306/spark",
                                "username",
                                "password"
    
    
                        );
                        connections.push(conn);
                    }
                }
    
            }catch (Exception e){
                e.printStackTrace();
            }
            return connections.poll();
        }
        /**
         * 还连接
         * 返回连接
         */
        public static void returnConnection(Connection conn){
            connections.push(conn);
        }
    }
    

      scala版简易版连接池:

    object ConnectionPoolUtil {
      /**
        * 需要设置的连接池数据
        */
      private val max=10//连接池总数
      private val connectionNum=10//每次产生连接数
      private val pool=new util.LinkedList[Connection]()
      private var conNum=0//当前连接池已经产生的连接数
    
      //获取连接
      def getConnections(): Connection ={
        //同步代码块
        AnyRef.synchronized({
          //加载驱动
          for(i<-1 to connectionNum){
            val conn = DriverManager.getConnection(
              "jdbc:mysql://localhost:3306/spark",
              "username",
              "password"
    
            )
            pool.push(conn)
            conNum+=1
    
          }
          pool.poll()
        })
    
      }
      //加载驱动
      def GetConn(): Unit ={
        //控制加载
        if (conNum<max && pool.isEmpty){
          Class.forName("com.mysql.jdbc.mysql.")
    
        }else if(conNum>=max&&pool.isEmpty){
          println("Jdbc Pool had no connection now,please wait a moments")
          Thread.sleep(2000)
          GetConn()
        }
    
      }
      //还连接
      def returnConn(conn:Connection): Unit ={
        pool.push(conn)
      }
    
    
    }
    

      

  • 相关阅读:
    gdb查看内存(转)
    c++ 前置++与后置++的区别
    stl第二级空间配置器详解(1)
    stl空间配置器简介
    套接字描述符就绪条件
    针对TCP连接异常断开的分析
    linux僵尸进程产生的原因以及如何避免产生僵尸进程
    k8s istio 配置域名转发到外部节点机器上
    tinymce增加mathjax 支持数学公式录入渲染
    vue 配置 TinyMCE
  • 原文地址:https://www.cnblogs.com/zmoumou/p/9948994.html
Copyright © 2020-2023  润新知