是的,您可以在连接池周围编写一个包装器类,并在连接周围编写一个包装器
所以假设你有:
OracleConnection conn=connectionPool.getConnection("java:scott@mydb");
改成:
公共类 LoggingConnectionPool 扩展 ConnectionPool{
public OracleConnection getConnection(String datasourceName, String module, String action){
OracleConnection conn=getConnection(datasourceName);
CallableStatement call=conn.preparedCall("开始 dbms_application_info.setModule(module_name => ?, action_name => ?); end;");
尝试{
call.setString(1,module);
call.setString(2,action);
调用.execute();
最后{
调用.close();
}
返回新的 WrappedOracleConnection(conn);
}
注意上面 WrappedOracleConnection 的使用。你需要这个,因为你需要捕获关闭电话
公共类 WrappedOracleConnection 扩展 OracleConnection{
公共无效关闭(){
CallableStatement call=this.preparedCall("开始 dbms_application_info.setModule(module_name => ?, action_name => ?); end;");
尝试{
call.setNull(1,Types.VARCHAR);
call.setNull(2,Types.VARCHAR);
调用.execute();
最后{
调用.close();
}
}
// 你需要实现所有其他方法
//例如
公共 CallableStatement prepareCall(字符串命令){
返回 super.prepareCall(command);
}
...
}
希望这会有所帮助,我在开发服务器上做了类似的事情来捕获未关闭的连接(未返回到池中)。