javaweb高级 第六章 连接池与数据源

1.本章目标

  了解连接池

  掌握JNDI.DBCP链接池的使用

2.连接池

  理解为一个带有多个连接的池子

  比如:

    连接池最小连接数:10,也就是该连接池初始化时有10个可用的连接

    连接池有最大连接数:100,表示该连接池最大上限100个连接

    当有请求连接数据库时,先判断10个连接是否有空闲.

      若有,就直接分配一个链接.

      若没有(10不够)就在小于最大连接数的前提下打开一个新的连接

      若已经有100个连接都在使用,后面的请求会等待前面使用完成后释放连接,在使用

3.JDNI

  java naming and directory interface: java命名和目录接口.顾名思义就是提供java的名称和目录方面的操作

  用途:

    连接对象,连接jdbc资源,简介jms资源,连接javamail资源

  tomcat实现jndi提供一种连接池技术(不常用)

    步骤:

      1.将连接数据库的驱动jar包拷贝到tomcat/lib目录

      2.tomcat/conf/context.xml中配置数据源(数据的来源,通常指数据库,数据源中存放了建立数据库连接的信息)

      <Resource name="jndiResource"           //名称

      auth="Container"          //资源管理者

      type="javax.sql.DataSource"     //资源所属的类型

      initialSize="1"           //初始化连接数

      maxActive="10"            //最大连接数

      minIdle="0"             //最小空闲数,0,不受限

      maxIdle="0"             //最大空闲数,0,不受限

      maxWait="5000"           //最大等待时间
                  username="root" password="123456" url="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF8" driverClassName="com.mysql.jdbc.Driver"
          ></Resource>

      3.在web.xml中配置数据源引用

          <resource-ref>
              <res-ref-name>jndiResource</res-ref-name>
              <res-type>javax.sql.DataSource</res-type>
              <res-auth>Container</res-auth>
          </resource-ref>

      

private static DataSource ds = null; //数据源

    /**
     * 获取一个连接对象
     * @return 返回一个连接对象
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            if(ds == null){
                //上下文
                Context context = new InitialContext();
                
                //从上下文对象中获取数据源  jndiResource:数据源名称
                ds =  (DataSource) context.lookup("java:comp/env/jndiResource");
            }
            //从数据源中获取连接对象
            conn = ds.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
java连接数据库代码

注意:关闭数据库 不是关闭  而是//将连接对象放入连接池中

0、DBCP简介

     DBCP(DataBase connection pool)数据库连接池是 apache 上的一个Java连接池项目。DBCP通过连接池预先同数据库建立一些连接放在内存中(即连接池中),应用程序需要建立数据库连接时直接到从接池中申请一个连接使用,用完后由连接池回收该连接,从而达到连接复用,减少资源消耗的目的。

1、DBCP所依赖的jar包(以下例子基于如下jar包版本)

   commons-dbcp2-2.1.1.jar       commons-logging-1.2.jar       commons-pool2-2.4.2.jar

#初始化连接数
dbcp.initialSize=1
dbcp.maxTotal=10
dbcp.maxIdle=0
dbcp.minIdle=0
dbcp.maxWaitMillis=1
dbcp.username=root
dbcp.password=123456
dbcp.driverClassName=com.mysql.jdbc.Driver
dbcp.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8
dbcp.properties
private static DataSource ds = null; //数据源

    /**
     * 获取一个连接对象
     * @return 返回一个连接对象
     */
    public static Connection getConnection() {
        Connection conn = null;
        //单例(在容器中只有一个对象,线程非安全)和多例(容器中有多个相同类型的对象,线程安全)
        try {
            if(ds==null){
            ds= getDataSourcer();
            }
            conn=ds.getConnection();            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
    
    public static DataSource getDataSourcer(){
        
        BasicDataSource bds=new BasicDataSource();
        ResourceBundle bundle=ResourceBundle.getBundle("dbcp");
        bds.setInitialSize(Integer.parseInt(bundle.getString("dbcp.initialSize")));
        bds.setMaxTotal(Integer.parseInt(bundle.getString("dbcp.maxTotal")));
        bds.setMaxIdle(Integer.parseInt(bundle.getString("dbcp.maxIdle")));
        bds.setMinIdle(Integer.parseInt(bundle.getString("dbcp.minIdle")));
        bds.setMaxWaitMillis(Integer.parseInt(bundle.getString("dbcp.maxWaitMillis")));
        bds.setUsername(bundle.getString("dbcp.username"));
        bds.setPassword(bundle.getString("dbcp.password"));
        bds.setDriverClassName(bundle.getString("dbcp.driverClassName"));
        bds.setUrl(bundle.getString("dbcp.url"));
        return bds;
    }
dbcp连接数据库java代码

直接拿来用!!

                                                `

 

posted @ 2019-03-28 08:34  星梦泪痕  阅读(301)  评论(0)    收藏  举报