3、ConnectionPool---Web容器

    DataSource和ConnectionPool的关系:
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
			<property name="driverClass" value="${jdbc.driver}" />
			<property name="jdbcUrl" value="${jdbc.url}" />
			<property name="user" value="${jdbc.userName}" />
			<property name="password" value="${jdbc.password}" />
			<property name="initialPoolSize" value="${jdbc.pool.initialPoolSize}" />
			<property name="minPoolSize" value="${jdbc.pool.minPoolSize}" />
			<property name="maxPoolSize" value="${jdbc.pool.maxPoolSize}" />
			<property name="maxIdleTime" value="${jdbc.pool.maxIdleTime}" />
			<property name="idleConnectionTestPeriod" value="${jdbc.pool.idleConnectionTestPeriod}" />
			<property name="maxStatements" value="30" />
			<property name="acquireIncrement" value="2" />
			<property name="acquireRetryAttempts" value="0" />
			<property name="preferredTestQuery" value="${jdbc.pool.preferredTestQuery}"/>
		</bean>

从这段代码中看出,datasource配置了数据库驱动和数据库地址和连接池信息。

   数据源是指数据的来源,比如数据库。连接池是指这样一个“池子”,池子中的每个东西都是连接数据源的一个“连接”,这样别人想连接数据源的时候可以从这个“池子”里取,用完以后再放回来供以后其他想使用的人使用。
我们一般说的数据源指的就是数据库。

tomcat下配置连接池的方法:
1、context.xml  + web.xml
连接JDBC的URL格式为jdbc:sqlite:/path。这里的path为指定到SQLite数据库文件的路径.
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
   <Resource  
      name="jdbc/mySqlite"  
      type="javax.sql.DataSource"  
      driverClassName="org.sqlite.JDBC"  
      maxIdle="4"  
      maxWait="5000"  
      url="jdbc:sqlite://F:/skx_space/java_web/sz_db/myfisrt.db"  
      maxActive="4"/>  
</Context>

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

测试:
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>     
<%@ page import="java.sql.*" %>     
<%@ page import="javax.naming.*" %>     
<%@ page import="javax.sql.DataSource" %>
<html>     
<head>     
<title>Tomcat8.0 JNDI!</title>    
</head>    
  <body>      
   Tomcat连接池测试,获取数据源 <br>     
    <%     
        try {      
            //初始化查找命名空间
            Context ctx = new InitialContext();  
            //参数java:/comp/env为固定路径   
            Context envContext = (Context)ctx.lookup("java:/comp/env"); 
            //参数jdbc/mysqlds为数据源和JNDI绑定的名字
            DataSource ds = (DataSource)envContext.lookup("jdbc/mySqlite"); 
            Connection conn = ds.getConnection(); 
            Statement stat = conn.createStatement();  
            ResultSet rs = stat.executeQuery("select count(1)  from people;");
            while (rs.next()) {   
             
              System.out.println("count = " + rs.getString(1));   
          } 
            conn.close();     
            out.println("<span style='color:red;'>JNDI测试成功<span>");     
        } catch (NamingException e) {     
            e.printStackTrace();     
        } catch (SQLException e) {     
            e.printStackTrace();     
        }     
    %>     
  </body>     
</html>   

print:3

2、在项目的meta目录里配置,也可在tomcat的server.xml文件中配置,也要配置context文件,不做介绍。
   在Web项目中的META-INF目录下新建一个文件context.xml,写入配置
   这里也要写数据库的绝对路径,其他mysql、oracle写入端口库名即可。这样配置就不用配置tomcat/web.xml文件了
  
<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/mySqlite" 
        auth="Container" 
        type="javax.sql.DataSource" 
        maxIdle="2" 
        maxWait="10000" 
        maxActive="4"
        driverClassName="org.sqlite.JDBC"
        url="jdbc:sqlite://F:/skx_space/java_web/sz_db/myfisrt.db"
        logAbandoned="true" />
</Context>



1、 程序获取连接和关闭连接
   虽然有了连接池,并不代表可以任意使用,也是需要获取一个连接,使用完后归还给连接池,这里的close方法是连接池重写的方法,connection只是一个接口,其实连接池getConnection返回的是自定义的实现类,重写了connection中所有方法。 所以这里的close并不是断开TCP连接,而是将连接返回连接池。
  而且这个close()是必须执行的,不然一直占用一个连接。

你可能感兴趣的:(Connection)