浏览 1954 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
贴出来代码。 package com.jy.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import net.sourceforge.jtds.jdbcx.JtdsDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ConnectionFactory { private final static String USER = ""; private final static String PWD = ""; private final static String IP = ""; private final static String DATABASE=""; private final static Log logger = LogFactory.getLog(ConnectionFactory.class); private final static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); private static DataSource dst=null; // jtds数据源 static { JtdsDataSource ds = new JtdsDataSource(); ds.setServerType(1);// SQL SERVER ds.setServerName(IP); ds.setDatabaseName(DATABASE); ds.setPortNumber(1433); ds.setXaEmulation(true); try { ds.setSocketTimeout(3000); } catch (SQLException e1) { logger.error(e1); } ds.setMaxStatements(500); ds.setUser(USER); ds.setBatchSize(50); ds.setCacheMetaData(true); ds.setPassword(PWD); dst=ds; } public static Connection getConnection() { Connection conn = threadLocal.get(); if (conn == null) { try { conn = dst.getConnection(); threadLocal.set(conn); } catch (SQLException e) { logger.error("从连接池获取连接失败!:" + e.getMessage()); } } return conn; } //dbcp连接池 // public static DataSource getDataSource() { // BasicDataSource ds = new BasicDataSource(); // ds.setDriverClassName(CLASSNAME); // ds.setUsername(USER); // ds.setPassword(PWD); // ds.setUrl(URL); // ds.setMaxActive(50); // ds.setMaxIdle(50); // ds.setMaxWait(3000); // 10 seconds // ds.setMaxOpenPreparedStatements(500); // System.out.println("NumActive: " + ds.getNumActive() + "," // + "NumIdle: " + ds.getNumIdle()); // // return ds; // } // 关闭连接 public static void closeConnection() { Connection conn = threadLocal.get(); threadLocal.set(null); try { if (conn != null && !conn.isClosed()) { conn.close(); } } catch (SQLException e) { logger.error("关闭连接失败!" + e.getMessage()); } } public static void main(String[] args) { for (int i = 0; i < 2; i++) { Connection conn = getConnection(); try { Statement st=conn.createStatement(); ResultSet rs=st.executeQuery("select * from test"); while(rs.next()){ System.out.println(rs.getInt("id")); } closeConnection(); } catch (SQLException e) { e.printStackTrace(); } } } } 写个request监听器 package com.tool; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import com.jinyu.jdbc.ConnectionFactory; public class ListenterCloseConnection implements ServletRequestListener{ public void requestDestroyed(ServletRequestEvent arg0) { ConnectionFactory.closeConnection(); } public void requestInitialized(ServletRequestEvent arg0) { } } 在web.xml 配置如下 <!-- 监听器,关闭Connection --> <listener> <listener-class> com.tool.ListenterCloseConnection </listenerclass> </listener> 那么同一次request请求,只打开一次连接!所以不论采用Struts还是Servlet还是直接用jsp。只打开连接。不需关闭连接。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |