国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 數據庫連接池詳解及簡單實例

Java 數據庫連接池詳解及簡單實例

2020-07-18 13:47java教程網 Java教程

這篇文章主要介紹了Java 數據庫連接池詳解及簡單實例的相關資料,需要的朋友可以參考下

Java 數據庫連接池詳解

數據庫連接池的原理是:

連接池基本的思想是在系統初始化的時候,將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,用戶也并非將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。

常用的數據庫連接池:

常用的數據庫連接池有JNDI,C3p0,Apache 的Jakarta 和DBCPBoneCP其中,sping框架依賴的第三方使用了c3p0和dbcp兩種方式;而bonecp號稱是速度最快的數據庫連接池。JNDI方式創建實現的datasource是真正實現了javax.sql.datasource(其他的三種方式都不是)

現在我們主要來介紹如何使用JNDI方式, 這種方式,是由web服務器(例如:tomcat,weblogic,websphere,tomcat),實現了java.sql.datasource。由web服務器負責初始化數據源,創建connection,分配,管理connection。由于本身是由web服務器實現的功能,因此不需要在項目中引入特別的jar包,但是需要在服務器的某些配置文件中增加相關的配置。下面,以Tomcat服務器(數據庫為MySQL)為例,講述這種方式的使用。

數據庫的創建與初始化數據:

?
1
2
3
4
5
6
7
8
create table test(id INT PRIMARY KEY,name VARCHAR(10),price FLOAT)
 
 
INSERT INTO test VALUES(1,'English',22.2);
 
INSERT INTO test VALUES(2,'Math',78.9);
 
INSERT INTO test VALUES(3,'History',77.9);

1.將 數據驅動mysql-connector-java-5.0.3-bin.jar 放入tomcat目錄下的lib中

2.修改tomcat的conf下的context.xml文件,增加Resource的配置的支持

?
1
2
3
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="30" maxWait="10000"
 name="jdbc/ewsdb" username="root" password="admin" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/test1"
/>

<Resource屬性說明>

1)name:指定Resource的JNDI名字。

2)auth:指定管理Resource的Manager,它有兩個可選值:Container和Application。Container表示由容器來創建和管理Resource,Application表示由web應用來創建和管理Resource。

3)type: 指定Resource的Java類名。

4)username:指定連接數據庫的用戶名。

5)password:指定連接數據庫的口令。

6)driverClassName:指定連接數據庫的JDBC驅動器中的Driver實現類的名字。

7)url:指定連接數據庫的URL,127.0.0.1是要連接的數據庫服務器的ip,3306是數據庫服務器端口,BookDB是數據庫名稱。

8)maxActive:指定數據庫連接池中處于活動狀態的數據庫連接的最大數目,取值為0,表示不受限制。

9)maxIdle:指定數據庫連接池中處于空閑狀態的數據庫連接的最大數目,取值為0,表示不受限制。

10)maxWait:指定數據庫連接池中的數據庫連接處于空閑狀態的最長時間(以毫秒為單位),超過這一時間,將會拋出異常。取值為-1,表示可以無限期等待。

maxActive="100"

表示并發情況下最大可從連接池中獲取的連接數。如果數據庫不是單獨,供一個應用使用,通過設置maxActive參數可以避免某個應用無限制的獲取連接對其他應用造成影響,如果一個數據庫只是用來支持一個應用那么maxActive理論上可以設置成該數據庫可以支撐的最大連接數。maxActive只是表示通過連接池可以并發的獲取的最大連接數。連接的獲取與釋放是雙向,當應用程序并發請求連接池時,連接池就需要從數據庫獲取連接,那么但應用程序使用完連接并將連接歸還給連接池時,連接池是否也同時將連接歸還給數據庫呢?很顯然答案是否定的,如果那樣的話連接池就變得多此一舉,不但不能提高性能,反而會降低性能,那么但應用成歸還連接后,連接池如何處理呢?

maxIdle="30"

如果在并發時達到了maxActive=100,那么連接池就必須從數據庫中獲取100個連接來供應用程序使用,當應用程序關閉連接后,由于maxIdle=30,因此并不是所有的連接都會歸還給數據庫,將會有30個連接保持在連接池種中,狀態為空閑。

minIdle=”2”

最小默認情況下并不生效,它的含義是當連接池中的連接少有minIdle,系統監控線程將啟動補充功能,一般情況下我們并不啟動補充線程。

問題:如何設置maxActive和maxIdle?

理論上講maxActive應該設置成應用的最大并發數,這樣一來即便是在最大并發的情況下,應用依然能夠從連接池中獲取連接,但是困難時的是我們很難準確估計到最大并發數,設置成最大并發數是一種最優的服務質量保證。

maxIdle對應的連接,實際上是連接池保持的長連接,這也是連接池發揮優勢的部分,理論上講保持較多的長連接,在應用請求時可以更快的響應,但是過多的連接保持,反而會消耗數據庫大量的資源,因此maxIdle也并不是越大越好,同上例我們建議將 maxIdle設置成50-100中靠近50的數字,例如55。這樣就能在兼顧最大并發同時,保持較少的數據庫連接,而且在絕大多情況,能夠為應用程序提供最快的相應速度。

3.打開應用程序的 Web.xml文件,添加以下配置

?
1
2
3
4
5
6
7
8
9
10
11
<resource-ref>
 
<description>DB Connection</description>
 
<res-ref-name>jdbc/ewsdb</res-ref-name>
 
<res-type>javax.sql.DataSource</res-type>
 
<res-auth>Container</res-auth>
 
</resource-ref>

 <resource-ref>屬性說明:

1)description:對所引用的資源的說明。

2)res-ref-name:指定所引用資源的JNDI名字,與<Resource>元素中的name屬性對應。

3)res-type:指定所引用資源的類名,與<Resource>元素中的type屬性對應。

4)res-auth:指定管理所引用資源的Manager,與<Resource>元素中的auth屬性對應

4. 編寫使用java代碼,并放在tomcat環境下使用,如下

創建JSP范例:MyJsp.jsp

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<html>
<head>
<title>Tomcat下JNDI數據庫連接池</title>
</head>
<body>
 <%
 try{
 Connection conn;
 Statement stmt;
 ResultSet rs;
 Context ctx = new InitialContext();
 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ewsdb");
 conn = ds.getConnection();
 stmt = conn.createStatement();
 //查詢記錄
 rs = stmt.executeQuery("select ID,NAME,PRICE from test");
 //輸出查詢結果
 out.println("<table border=1 width=400>");
 while (rs.next()){
  String col1 = rs.getString(1);
  String col2 = rs.getString(2);
  float col3 = rs.getFloat(3);
  //打印顯示的數據
  out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td></tr>");}
  out.println("</table>");
 
 //關閉結果集、SQL聲明和數據庫連接
 rs.close();
 stmt.close();
 conn.close();
 }catch(Exception e){
 out.println(e.getMessage());
 e.printStackTrace();
 }
 %>
</body>
</html>

 在瀏覽器中輸入http://localhost:8080/test/MyJsp.jsp,即可查看結果

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_35101189/article/details/53791552

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久一在线 | 日韩色爱| 久久久91精品国产一区二区三区 | 欧美一区二区三区在线观看视频 | 91精品一区二区 | 精品无人乱码一区二区三区 | av黄色在线看 | 一区二区三区在线看 | 日韩一二三区视频 | 一本久道视频一本久道 | www日韩| 色狠狠综合天天综合综合 | 啊啊啊网站 | 亚洲www视频 | 最近免费中文字幕在线视频2 | 伊人久久国产 | 久久这里有精品视频 | 亚洲成人第一 | 久久久久久国产精品 | www.99re| 激情综合网址 | 欧美日韩高清 | 精品欧美乱码久久久久久 | 不卡一二三区 | 欧美日韩在线一区二区三区 | 精品一区二区三区久久 | 美女视频一区二区三区 | 国产精品久久久久久久久久久久久 | 理伦影院 | 欧美日韩一区二区三区在线观看 | 不卡视频一区二区 | 91国内外精品自在线播放 | 久久99精品久久久久久久青青日本 | 国产成人在线电影 | 在线播放亚洲 | 日本中文字幕久久 | 欧美精品欧美精品系列 | 四虎最新网站 | 亚洲精品国偷拍自产在线观看 | 亚洲精品一区二区网址 | 国产欧美日韩综合精品一区二区 |