3、ConnectionPool---Webコンテナ
5407 ワード
DataSourceとConnectionPoolの関係:
このコードから、datasourceはデータベースドライバとデータベースアドレスと接続プール情報を構成していることがわかります.
データ・ソースとは、データベースなどのデータのソースです.接続プールとは、このような「池」のことで、池の中のすべてのものがデータソースを接続する「接続」であり、他の人がデータソースを接続したいときにこの「池」から取り出すことができ、使い終わったら、後で他の使いたい人のために戻して使用することができます.
一般的にデータ・ソースとは、データベースを指します.
tomcatで接続プールを構成する方法:
1、context.xml + web.xml
接続JDBCのURL形式はjdbc:sqlite:/pathです.ここでpathはSQLiteデータベースファイルに指定するパスである.
テスト:
print:3
2、プロジェクトのmetaディレクトリに配置し、tomcatのserver.xmlファイルで構成し、contextファイルも構成し、紹介しません.
WebプロジェクトのMETA-INFディレクトリの下に新しいファイルcontextを作成します.xml、書き込み構成
ここにもデータベースの絶対パスを書き、他のmysql、oracleはポートライブラリ名に書き込めばいいです.これによりtomcat/webを構成する必要がなくなる.xmlファイル
1、
プログラムは接続を取得して閉じる:
接続プールがあっても、任意に使用できるわけではありませんが、接続を取得する必要があります.使用後、接続プールに返却します.ここのcloseメソッドは接続プールの書き換え方法で、connectionはただのインタフェースです.実は、接続プールgetConnectionは独自の実装クラスを返し、connectionのすべてのメソッドを書き換えました.したがって,ここのcloseはTCP接続を切断するのではなく,接続プールに戻る.
また、このclose()は実行する必要があります.そうしないと、接続がずっと占有されます.
<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()は実行する必要があります.そうしないと、接続がずっと占有されます.