proxool 설정
proxool 데이터베이스 연결 풀 프레임 워 크 는 선택 한 다른 유형의 드라이버 에 대한 연결 풀 패 키 지 를 제공 합 니 다.기 존 코드 에 아주 간단하게 이식 할 수 있 습 니 다.완전히 설정 가능 합 니 다.빠르다기 존의 JDBC 드라이버 에 연결 풀 기능 을 투명 하 게 추가 할 수 있 습 니 다.지금까지 최신 버 전 은 proxool 0.9.1 로 홈 페이지 에서 최신 버 전 을 다운로드 할 수 있 습 니 다.http://proxool.sourceforge.net
1. proxool. xml 파일 설정
<?xml version="1.0" encoding="UTF-8"?>
<!--
the proxool configuration can be embedded within your own
application's. Anything outside the "proxool" tag is ignored.
-->
<something-else-entirely>
<proxool>
<alias>dbname</alias> <!-- -->
<driver-url>jdbc:oracle:thin:@127.0.0.1:1521:testdb</driver-url><!--url -->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!-- -->
<driver-properties>
<property name="user" value="username" /> <!-- -->
<property name="password" value="password" /><!-- -->
</driver-properties>
<!-- ( 5 ), , , , maximum-new-connections -->
<maximum-connection-count>100</maximum-connection-count>
<!-- ( 2 )-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool ( ), , 30 -->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- , -->
<maximum-new-connections>10</maximum-new-connections>
<!-- ( 2 )-->
<prototype-count>5</prototype-count>
<!-- -->
<test-before-use>true</test-before-use>
<!-- -->
<house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>
</proxool>
</something-else-entirely>
2. 웹. xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.admin.servlet.AdminServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
<!-- , Tomcat -->
<security-constraint>
<web-resource-collection>
<web-resource-name>proxool</web-resource-name>
<url-pattern>/admin</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>proxool manager Application</realm-name>
</login-config>
<security-role>
<description>The role that is required to log in to the Manager Application</description>
<role-name>manager</role-name>
</security-role>
<error-page>
<error-code>401</error-code>
<location>/401.jsp</location>
</error-page>
</web-app>
ServletConfigurator: proxool. xml 파일 을 불 러 오고 초기 화 합 니 다. 데이터 베 이 스 를 연결 하 는 것 이기 때 문 입 니 다. 다른 많은 모듈 은 데 이 터 를 사용 하기 때문에 load - on - startup 을 먼저 불 러 와 야 합 니 다. 수치 가 작 을 수록 먼저 불 러 옵 니 다. Admin: 데이터베이스 연결 풀 의 연결 상황 모니터링
/ / 데이터베이스 연결 을 가 져 오 는 문장
Connection conn=DriverManager.getConnection("proxool.dbname");
메모: 401. jsp 페이지 에 추가 해 야 합 니 다.
<% response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\""); %>이 말 은 그렇지 않 으 면 연결 풀 정 보 를 방문 / admin 에서 살 펴 볼 때 401. jsp 페이지 로 바로 이동 합 니 다.admin / 에 접근 하 는 사용자 에 게 사용자 이름과 비밀 번 호 를 입력 하고 manager 역할 이 어야 합 니 다. 세 번 의 입력 이 정확 하지 않 아야 401. jsp 페이지 로 이동 할 수 있 습 니 다. 그림 참조
정확 한 사용자 이름과 비밀 번 호 를 입력 해 야 proxool 풀 의 정 보 를 볼 수 있 습 니 다.
http://sunnylocus.iteye.com/upload/picture/pic/34529/d9240b55-37c3-3eac-83c1-cb6aeb6a61aa.jpg
3. 더 자세 한 proxool. xml 설정 속성 설명:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Properties for Proxool Configurator testing. Defines the same parameters as
TestHelper.buildCompleteAlternativeProperties()
-->
<something-else-entirely xmlns="http://sumthin.else.entirely" xmlns:proxool="The latest version is available at http://proxool.sourceforge.net/xml-namespace">
<proxool:proxool>
<proxool:alias>xml-test-ns</proxool:alias>
<proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url>
<proxool:driver-class>org.hsqldb.jdbcDriver</proxool:driver-class>
<proxool:driver-properties>
<proxool:property name="user" value="sa"/>
<proxool:property name="password" value=""/>
</proxool:driver-properties>
<proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time>
<proxool:house-keeping-test-sql>select CURRENT_DATE</proxool:house-keeping-test-sql>
<proxool:maximum-connection-count>10</proxool:maximum-connection-count>
<proxool:minimum-connection-count>3</proxool:minimum-connection-count>
<proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime> <!-- 5 hours -->
<proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle>
<proxool:recently-started-threshold>40000</proxool:recently-started-threshold>
<proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime>
<proxool:maximum-active-time>60000</proxool:maximum-active-time>
<proxool:verbose>true</proxool:verbose>
<proxool:trace>true</proxool:trace>
<proxool:fatal-sql-exception>Fatal error</proxool:fatal-sql-exception>
<proxool:prototype-count>2</proxool:prototype-count>
</proxool:proxool>
<nothing-to-do-with-proxool>
<proxool:proxool>
<proxool:alias>xml-test-ns-2</proxool:alias>
<proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url>
<proxool:driver-class>org.hsqldb.jdbcDriver</proxool:driver-class>
<proxool:driver-properties>
<proxool:property name="user" value="sa"/>
<proxool:property name="password" value=""/>
</proxool:driver-properties>
<proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time>
<proxool:house-keeping-test-sql>select CURRENT_DATE</proxool:house-keeping-test-sql>
<proxool:maximum-connection-count>10</proxool:maximum-connection-count>
<proxool:minimum-connection-count>3</proxool:minimum-connection-count>
<proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime> <!-- 5 hours -->
<proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle>
<proxool:recently-started-threshold>40000</proxool:recently-started-threshold>
<proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime>
<proxool:maximum-active-time>60000</proxool:maximum-active-time>
<proxool:verbose>true</proxool:verbose>
<proxool:trace>true</proxool:trace>
<proxool:fatal-sql-exception>Fatal error</proxool:fatal-sql-exception>
<proxool:prototype-count>2</proxool:prototype-count>
</proxool:proxool>
</nothing-to-do-with-proxool>
</something-else-entirely>
속성 목록 설명:
fatal - sql - exception: 쉼표 로 분 할 된 정보 세 션 입 니 다. SQL 이상 이 발생 하면 그의 이상 정 보 는 이 정보 세 션 과 비교 합 니 다. 세 션 에 존재 하면 이 이상 은 치 명 적 인 오류 (Fatal SQL Exception) 로 여 겨 집 니 다. 이 경우 데이터베이스 연결 은 포 기 됩 니 다. 무슨 일이 있어 도,이 이상 은 소비자 에 게 제공 하기 위해 다시 던 져 질 것 입 니 다. 사용 자 는 스스로 다른 이상 을 설정 하여 던 지 는 것 이 좋 습 니 다.
fatal - sql - exception - wrapper - class: 위 에서 말 한 바 와 같이 다른 이상 을 설정 하여 다시 던 지 는 것 이 좋 습 니 다. 이 속성 을 이용 하여 사용 자 는 SQLException 을 포장 할 수 있 습 니 다.그 를 또 다른 이상 으로 만 들 었 다. 이 이상 또는 SQLException 또는 계승 자 Runtime Exception. proxool 은 'org. logicalcobweb. proxool. FatalSQLException' 과 'org. logicalcobweb. proxool. FatalRuntime Exception' 을 자체 적 으로 가 져 왔 다. 후 자 는 더욱 적합 하 다.
house - keeping - sleep - time: house keeper 는 스 레 드 가 수면 상태 에 있 는 가장 긴 시간 을 유지 합 니 다. house keeper 의 직책 은 각 연결 상 태 를 검사 하고 소각 하거나 만들어 야 하 는 지 판단 하 는 것 입 니 다.
house-keeping-test-sql: 남 은 데이터베이스 연결 이 발견 되면 house keeper 는 이 문 구 를 사용 하여 테스트 합 니 다. 이 문 구 는 매우 빨리 실행 되 는 것 이 좋 습 니 다. 정의 가 없 으 면 테스트 과정 은 무 시 됩 니 다.
injectable - connection - interface: proxool 이 대 리 된 connection 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - statement - interface: proxool 이 대 리 된 Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - prepared - statement - interface: proxool 이 대 리 된 Prepared Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
injectable - calable - statement - interface: proxool 이 대 리 된 Callable Statement 대상 을 실현 하 는 방법 을 허용 합 니 다.
생략
jmx - agent - id: 략
jndi - name: 데이터 원본 이름
maximum - active - time: housekeeper 가 이 수치 보다 활동 시간 이 많은 것 을 감지 하면 이 스 레 드 를 죽 일 것 입 니 다. 따라서 서버 의 대역 폭 을 확인 하고 적당 한 값 을 정 하 십시오. 기본 값 은 5 분 입 니 다.
maximum - connection - count: 최대 데이터베이스 연결 수.
maximum - connection - lifetime: 하나의 스 레 드 의 최대 수명.
minimum - connection - count: 최소 데이터베이스 연결 수
overload - without - refural - lifetime: 약
prototype - count: 연결 탱크 에서 사용 할 수 있 는 연결 수량 입 니 다. 현재 연결 탱크 의 연결 이 이 수치 보다 적 으 면 새로운 연결 이 만들어 집 니 다. (최대 사용 가능 한 수 를 초과 하지 않 았 다 고 가정 합 니 다) 예 를 들 어, 우 리 는 3 개의 활동 으로 2 개의 연결 이 가능 합 니 다. 우리 의 prototype - count 는 4 입 니 다.그러면 데이터베이스 연결 탱크 는 다른 2 개의 연결 을 만 들 려 고 합 니 다. 이것 은 minimum - connection - count 와 다 릅 니 다. minimum - connection - count 는 활동 의 연결 도 계산 합 니 다. prototype - count 는 spare connections 의 수량 입 니 다.
recently-started-threshold: 대략.
simultaneous-build-throttle: 대략.
statistics: 연결 탱크 사용 현황 통계.인자 "10s, 1m, 1d"
statistics-log-level: 로그 통계 추적 형식.인자 "ERROR" 또는 "INFO"
test - before - use: 약
test - after - use: 약
trace: true 라면 실 행 된 SQL 문 구 는 실행 기간 에 log 에 기 록 됩 니 다 (DEBUG LEVEL). Connection Listener (ProxoolFacade 참조) 를 등록 하여 이 정 보 를 얻 을 수 있 습 니 다.
verbose: 상세 정보 설정.매개 변수 bool 값
------------------------------------------------------------------------------------------------------
1. WEB-INF proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<proxool>
<alias>DBPool</alias> <!-- -->
<driver-url>jdbc:sqlserver://localhost:1433;DatabaseName=test</driver-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="sa1234"/>
</driver-properties>
<!-- ( , , -->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- , , , -->
<proxool.simultaneous-build-throttle>20</proxool.simultaneous-build-throttle>
<!-- -->
<prototype-count>1</prototype-count>
<!-- , , , -->
<maximum-connection-count>1</maximum-connection-count>
<!-- -->
<minimum-connection-count>1</minimum-connection-count>
<!-- .house keeper . . , 。 -->
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
2. web.xml
<!-- proxool -->
<servlet>
<servlet-name>proxoolServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value><!-- xml -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool , -->
<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
3. jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html; charset=GBK"%>
<%@page import="test.*"%>
<html>
<head>
<title>ProxoolTest</title>
</head>
<body bgcolor="#ffffff">
<h1>Proxool </h1>
<%
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection("proxool.DBPool");
stmt = con.createStatement();
String query = "select * from test t";
out.println("query:" + query+ "--OK<br/>");
rs = stmt.executeQuery(query);
out.println("rs.next():" + rs.next()+ "--OK<br/>");
while (rs.next()) {
out.println(rs.getString(3) + "--OK<br/>");
}
}
catch (SQLException sqle) {
out.println("sqle=" + sqle+ "--OK<br/>");
}
finally {
try {
rs.close();
stmt.close();
if (con != null) {
con.close();
}
}
catch (SQLException sqle) {
out.println("sqle=" + sqle+ "--OK<br/>");
}
}
%>
</body>
</html>
4. main
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
public class TestProxool {
// public static String dburl =
// "jdbc:oracle:thin:@192.168.104.192:1521:tim";
public static String dburl = "jdbc:sqlserver://localhost:1433;DatabaseName=test";
public static String user = "sa";
public static String password = "sa1234";
/**
* JDBC
*
* @throws Exception
*/
public static void test1() throws Exception {
String testsql = "select * from test";
// 1:
// Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2:
Connection conn = DriverManager.getConnection(dburl, user, password);
// 3: SQL
Statement stmt = conn.createStatement();
// 4: SQL,
ResultSet rs = stmt.executeQuery(testsql);
// 5: ,
while (rs.next()) {
System.out.print(rs.getString("a") + "\t");
// System.out.print(rs.getString("name") + "\t");
System.out.println();
}
// 6:
conn.close();
}
/**
* proxool
*
* @throws Exception
*/
public static void test2() throws Exception {
// Java ,
JAXPConfigurator.configure("D:\\workspace\\PoolTest\\src\\proxool.xml", false);
String testsql = "select * from test";
// 1: , Oracle , Proxool
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
// 2: , , , DBPool, :proxool.
Connection conn = DriverManager.getConnection("proxool.DBPool");
// 3: SQL
Statement stmt = conn.createStatement();
// 4: SQL,
ResultSet rs = stmt.executeQuery(testsql);
// 5: ,
while (rs.next()) {
System.out.print(rs.getString("e") + "\t");
// System.out.print(rs.getString("name") + "\t");
System.out.println();
}
// 6:
conn.close();
}
public static void main(String[] args) throws Exception {
//test1();
test2();
}
}
5. java+jsp
(1)java
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
public class PoolManager {
private static int activeCount = 0;
public PoolManager() {
}
/**
* * * getConnection *
*
* @param name
*
* @return
*/
public Connection getConnection() {
try {
// JAXPConfigurator.configure("D:\\workspace\\PoolTest\\src\\proxool.xml",
// false);
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");// proxool
Connection conn = DriverManager.getConnection("proxool.DBPool");
// DBPool proxool.xml
showSnapshotInfo();
return conn;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
*
* * showSnapshotInfo
*/
private void showSnapshotInfo() {
try {
SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool", true);
int curActiveCount = snapshot.getActiveConnectionCount();//
int availableCount = snapshot.getAvailableConnectionCount();//
int maxCount = snapshot.getMaximumConnectionCount();//
if (curActiveCount != activeCount)//
{
System.out.println(" :" + curActiveCount
+ "(active) :" + availableCount
+ "(available) :" + maxCount + "(max)");
activeCount = curActiveCount;
}
} catch (ProxoolException e) {
e.printStackTrace();
}
}
/**
* *
* * getConnection *
*
* @param name
*
* @return
*/
public Connection getConnection(String name) {
return getConnection();
}
/**
* * * freeConnection *
*
* @param conn
*
*/
public void freeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* * * freeConnection *
*
* @param name
* *
* @param con
*
*/
public void freeConnection(String name, Connection con) {
freeConnection(con);
}
public void getQuery() {
try {
Connection conn = getConnection();
if (conn != null) {
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from test");
int c = rs.getMetaData().getColumnCount();
while (rs.next()) {
System.out.println();
for (int i = 1; i <= c; i++) {
System.out.print(rs.getObject(i));
}
}
rs.close();
}
freeConnection(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
(2)jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html; charset=GBK"%>
<%@page import="test.*"%>
<html>
<head>
<title>ProxoolTest</title>
</head>
<body bgcolor="#ffffff">
<h1>
Proxool
</h1>
<%
Connection con = null;
try {
PoolManager poo = new PoolManager();
//con =poo.getConnection();
poo.getQuery();
} catch (Exception sqle) {
out.println("sqle=" + sqle + "--OK<br/>");
} finally {
}
%>
</body>
</html>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.