3、ConnectionPool---Webコンテナ

5407 ワード

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()は実行する必要があります.そうしないと、接続がずっと占有されます.