『壹』 TOMCAT怎麼配置連接池
Tomcat的連接池配置方式具體如下:
一.配置tomcat連接池
1. 修改server.xml或者在conf/Catalina/localhost下添加對應的xml片段。此處使用的是第二種方法。
在conf/Catalina/localhost文件夾下新建ROOT.xml片段,添加以下內容:
<?xmlversion="1.0"encoding="UTF-8"?>
<Context crossContext="true" useHttpOnly="true">
<Resourcename="jdbc/infogrid" type="javax.sql.DataSource" password="123456" driverClassName="com.mysql.jdbc.Driver" maxIdle="10" maxWait="50" username="root" url="jdbc:mysql://localhost:3306/infogrid?autoReconnect=true" maxActive="20"/>
</Context>
2. 為tomcat添加資料庫連接驅動包,本用例使用mysql,將mysql的驅動包添加到common/lib下
二.編寫java測試類(該類必須部署在tomcat容器中,否則無法獲得JNDI資源)
PreparedStatement ps=null;
ResultSet rs=null;
try{
InitialContext ctx=new InitialContext();
DataSource dataSource=(DataSource)ctx.lookup("java:comp/env/jdbc/infogrid");
Connection connection=dataSource.getConnection();
ps=connection.prepareStatement("select count(*) from test");
rs=ps.executeQuery();
rs.next();
System.out.println("表中行數為:"+rs.getInt(1));
rs.close();
ps.close();
System.out.println(connection.getClass());
//class org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
Field field=connection.getClass().getDeclaredField("delegate");
field.setAccessible(true);
System.out.println(field.get(connection).getClass());
//class org.apache.tomcat.dbcp.dbcp.PoolableConnection
connection.close();
//此關閉並非為真得關閉資料庫連接,具體該close實現可見上面的兩個Connection代理類,其實只是告訴連接池,該Connection已經用完了,可以被再次利用了
}catch(Exception ex){
ex.printStackTrace();
}
『貳』 tomcat6.0下配置資料庫連接池問題
<resource-ref>
<res-ref-name>jdbc/bbs</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
web.xml裡面設置好引用,讓容器管理連接池
WEB-INF/lib裡面不需要放置驅動類,你仔細檢查下mssql2000的驅動類是不是正確的,解壓驅動類jar文件,檢查下是否存在com.microsoft.jdbc.sqlserver.SQLServerDriver.class這個類。如果不存在,你就需要換個驅動類,否則一定是content.xml配置寫錯了。
耐心,我當初用JNDI時候也遇到很多異常不能解決,但是最後發現都是一些被忽略的細節導致的。
『叄』 tomcat 6..0.20 連接池配置 SQL server 2000資料庫
這是我自己寫的,肯定好用,參考一下吧。
資料庫連接的建立和關閉是非常耗費系統資源的操作。資料庫連接池的解決方案是在應用程序啟動時建立足夠的資料庫連接,並將這些連接組成一個連接池,由應用程序動態的對池中的連接進行申請、使用和釋放。對於多餘連接池中的連接數的請求,應在請求隊列中排隊等待。並且應用程序會根據連接的使用率動態的增加和減少池中的連接數。
連接池技術盡可能多的重用了消耗內存的資源,大大節省了內存,提高了伺服器的效率。
不同的版本的tomcat創建連接池的方法是不同的。下面基於tomcat5.5 + MS sql server 2k來說明。
step1:資料庫驅動(三個jar)放到$tomcat$/common/lib中。
step2:打開$tomcat$/conf/server.xml,在host下加入如下代碼
以下是引用片段:
<Context path="" docBase="D:\myelipseJsp\dsideal\WebRoot" reloadable="true">
<Resource
name="jdbc/xxx"
type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=database"
maxActive="300"
maxIdle="100"
maxWait="5000"
removeAbandoned="true"
removeAbandonedTimeout="100"
logAbandoned="true"
/>
</Context>
註:在tomcat6.0下,需要在Resource中加入一句auth="Container"即可。
maxActive是最大激活連接數,這里取值為300,表示同時最多有300個資料庫連接。
maxIdle是最大的空閑連接數,這里取值為100,表示即使沒有資料庫連接時依然可以保持100空閑的連接,而不被清除,隨時處於待命狀態。
MaxWait是最大等待秒鍾數,這里取值5000,表示5秒後超時,也可取值-1,表示無限等待,直到超時為止。
removeAbandoned="true"
removeAbandonedTimeout="100"
logAbandoned="true"
以上三句話也需要加入,其主要作用在於當並發用戶超過預定的連接後會有一些連接因為等待而失效,要及時回收這些無效鏈接。100表示100秒。
在connpool.jsp中使用。
以下是引用片段:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from news";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%> <br>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
注意兩段代碼中的jdbc/xxx為連接池的名字,要保持一致。
當然我們也可以將連接封裝起來,作為一個類使用。結合我們以前所講的dataconn.java,這里我將它們合並為一個類。代碼如下:
以下是引用片段:
package dataconn;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class dataconn{
ResultSet rs = null;
Connection conn=null;
Statement stmt=null;
//連接池
public static synchronized Connection getConnection() throws Exception
{
try
{
Context initCtx = new javax.naming.InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/xxx"); ;
return ds.getConnection();
}
catch(SQLException e)
{
throw e;
}
catch(NamingException e)
{
throw e;
}
}
//更新數據
public void executeUpdate(String sql) {
try {
conn = getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeUpdate: " + ex.getMessage());
System.err.println("aq.executeUpadatestrSQL: " + sql);
}
}
//查詢數據
public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
System.err.println("aq.executeQuerystrSQL: " + sql);
}
return rs;
}
public void closeStmt()
{
try{
if(stmt!=null){
stmt.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
public void closeConn()
{
try{
if (conn!=null){
conn.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
}
此外你要保證你的sqlserver資料庫是好用的才行,用這個測試一下
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=data_2007";
String user="sa";
String password="sa";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from userlist";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%> <br>
您的第二個欄位內容為:<%=rs.getString(2)%> <br>
您的第三個欄位內容為:<%=rs.getString(3)%> <br>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
將上面代碼另存為.jsp,注意修改資料庫名,用戶名和密碼,即可測試sql server是否安裝成功。
『肆』 怎麼在tomcat配置資料庫連接池
方法/步驟
Tomcat大都是免安裝綠色版的,找到Tomcat的解壓路徑,然後找打一下文件:tomcat\conf\context.xml。
打開文件context.xml。
將右側滾動條拉到最下方,並添加如下圖紅色框內的代碼。
也可復制如下代碼:
<Resource driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="30" maxIdle="3" maxWait="5000" name="jdbc/test" username="test" password="test"
type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
那上邊的代碼有什麼作用呢?下邊來給大家解釋比較常用的幾個參數。
driverClassName:驅動的名稱。
該參數為資料庫驅動類名稱,比如上邊使用的是oracle的驅動。當然也意為著只能連接Oracle的資料庫。如果想用MySQL的,那就寫下邊這個嘍。
MySQL的驅動為:com.mysql.jdbc.Driver
name/password:為資料庫的用戶名和密碼。
『伍』 Tomcat6 資料庫連接池
name:連接池的名字
auth:連接生成的范圍
type:連接類型
MaxActive,連接池的最大資料庫連接數。設為0表示無限制。
maxIdle,最大空閑數,資料庫連接的最大空閑時間。超過空閑時間,資料庫連
接將被標記為不可用,然後被釋放。設為0表示無限制。
maxWait ,最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示
無限制。
username:連接的用戶名
password:連接使用的密碼
driverClassName:資料庫連接驅動
url:連接使用的url
DatabaseName:資料庫sid標示