现在打算用struts1.2 MYsql开发一个web项目。数据库连接用到proxool 连接池,现遇到3个问题:1.怎么配置proxool, 在项目启动时 就初始化它 :2.初始化 结束后 比如通过 getConn() 获得连接数据库连接,这么写这个方法才能实现每次调用这个方法 都是从连接池中取出一个连接 而不是 从新连接数据库 获得的连接。
3.最后 比如有一个操作
conn =getConn();
stmt=conn。createStatment();
rs=stmt。executeQuery();
.... 请问操作结束后 rs.close() stmt。close() conn 是否还要close();
如果conn。close() 那么下次调用getConn() 是否相当于从新打开数据库 而不是从连接池中取已有连接 如果不关闭conn 那么 proxool 是回收它 还是 conn 泄露请配置过proxool 的人 解答下 最好给出详细代码 感激不尽!
3.最后 比如有一个操作
conn =getConn();
stmt=conn。createStatment();
rs=stmt。executeQuery();
.... 请问操作结束后 rs.close() stmt。close() conn 是否还要close();
如果conn。close() 那么下次调用getConn() 是否相当于从新打开数据库 而不是从连接池中取已有连接 如果不关闭conn 那么 proxool 是回收它 还是 conn 泄露请配置过proxool 的人 解答下 最好给出详细代码 感激不尽!
解决方案 »
- 基于Tomcat的Web程序中HTML嵌套FLASH问题
- 抛出java.lang.ExceptionInInitializerError异常如何解决?
- 如何修改myeclipse默认文件编辑器
- java web应用开发中使用Hibernate操作数据库步骤
- 怎么把带有小计,合计的sql语句放到结果集中,并从结果集中读出
- 关于时间的问题
- 帮忙出点注意吧!把仅有的34分送出去了!
- applet和servlet通信的问题
- 高分求救!struts中如何使用Frame ????
- JSP中session使用为什么老是不正确呢?请指点迷津,谢谢了。
- Pager tag 分页问题
- 如何处理搜索引擎中页面重复问题
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>mysql</alias>
<driver-url>
jdbc:mysql://localhost:3306/hehe
</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root" />
<property name="password" value="1" />
</driver-properties><house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-new-connections>30</maximum-new-connections>
<prototype-count>5</prototype-count>
<maximum-connection-count>100</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
<house-keeping-test-sql>SELECT CURRENT_USER</house-keeping-test-sql></proxool>
</something-else-entirely>
close()是把当前连接返回到连接池,这样getConnection才能获取到。
由于从连接池拿到的conn是经过包装的,他的close方法不是真正的关闭数据库连接,而是把这个连接返回到池内作为空闲连接使用连接池了,是不是不需要关闭呢?
错!!! 要调用conn.close()把连接返回到连接池,
否则,连接池里没有空闲连接,每次get的时候都会去创建一个新的,直到达到最大连接数
proxool。xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>v1Pool</alias>
<!-- 数据库url连接 -->
<driver-url>jdbc:mysql://localhost:3306/ecms</driver-url>
<!-- mysql驱动 -->
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<driver-properties>
<!-- userName -->
<property name="user" value=".."/>
<!-- password -->
<property name="password" value="..."/>
<property name="useUnicode" value="true"/>
<property name="characterEncoding" value="utf-8"/>
</driver-properties>
<!--自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁1-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--最少保持的空闲连接数-->
<prototype-count>5</prototype-count>
<!--允许最大连接数,超过了这个连接,再有请求时,就排在队列中-->
<maximum-connection-count>1000</maximum-connection-count>
<!--最小连接数-->
<minimum-connection-count>10</minimum-connection-count>
<!--最大的等待请求数,即因没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的 用户连接就不会被接受-->
<proxool.simultaneous-build-throttle>200</proxool.simultaneous-build-throttle>
<!--Test SQL(SELECT getDate()) -->
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
=================
web。xml
<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>/ecms-proxoolPool</url-pattern>
</servlet-mapping>===================
java代码:
public abstract class BaseDao {
/**
* 数据库参数变量初始化
*/
public static Connection conn = null;
public static Statement stmt = null;
public static ResultSet rs = null;
/**
* GET MTSQL DATABASE CONNECTION
* @return Connection
*/
public static Connection getConn() {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
conn = DriverManager.getConnection("proxool.v1Pool"); } catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
}
return conn;
} /**
* 关闭数据库的连接
* @return null
*/
public static void close() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
} catch (SQLException ex) {
System.out.println("断开数据库操作出现异常!");
System.out.println(ex.getMessage());
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex1) {
System.out.println("关闭数据库连接出现异常!");
System.out.println(ex1.getMessage());
}
}
}}===========================
现在请结合 上面的3个问题 看下吧 谢谢各位!
web。xml 的servlet,其中的ServletConfigurator是装载WEB-INF目录下的proxool.xml,表示启动连接池2、获取连接
conn = DriverManager.getConnection("proxool.v1Pool");
这样操作的结果就是从连接池中获取一个空闲的链接,并不是重新连接。3、conn。close()
这样的操作只是将连接返回给连接池,并没有实际上的关闭连接,切记每次执行完毕之后要执行此操作。
从中获取连接, 请问这样配置 和 我的配置 有什么区别吗?