‘壹’ 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标示