forked from p81075629/datagear
修复系统未正确关闭数据库连接导致相关功能会出现无法响应的BUG
This commit is contained in:
parent
f0e28e4941
commit
5b2756a4ed
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* http://www.gnu.org/licenses/lgpl-3.0.html
|
||||
*/
|
||||
|
||||
|
@ -27,11 +27,12 @@ import org.datagear.analysis.ResolvableDataSet;
|
|||
import org.datagear.analysis.ResolvedDataSetResult;
|
||||
import org.datagear.util.JDBCCompatiblity;
|
||||
import org.datagear.util.JdbcSupport;
|
||||
import org.datagear.util.JdbcUtil;
|
||||
import org.datagear.util.QueryResultSet;
|
||||
import org.datagear.util.Sql;
|
||||
import org.datagear.util.SqlType;
|
||||
import org.datagear.util.resource.ConnectionFactory;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* SQL {@linkplain DataSet}。
|
||||
|
@ -44,6 +45,8 @@ import org.datagear.util.resource.ConnectionFactory;
|
|||
*/
|
||||
public class SqlDataSet extends AbstractResolvableDataSet implements ResolvableDataSet
|
||||
{
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SqlDataSet.class);
|
||||
|
||||
protected static final JdbcSupport JDBC_SUPPORT = new JdbcSupport();
|
||||
|
||||
private ConnectionFactory connectionFactory;
|
||||
|
@ -107,58 +110,63 @@ public class SqlDataSet extends AbstractResolvableDataSet implements ResolvableD
|
|||
|
||||
try
|
||||
{
|
||||
cn = getConnectionFactory().get();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
JdbcUtil.closeConnection(cn);
|
||||
throw new SqlDataSetConnectionException(t);
|
||||
}
|
||||
try
|
||||
{
|
||||
cn = getConnectionFactory().get();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throw new SqlDataSetConnectionException(t);
|
||||
}
|
||||
|
||||
Sql sqlObj = Sql.valueOf(sql);
|
||||
Sql sqlObj = Sql.valueOf(sql);
|
||||
|
||||
JdbcSupport jdbcSupport = getJdbcSupport();
|
||||
JdbcSupport jdbcSupport = getJdbcSupport();
|
||||
|
||||
QueryResultSet qrs = null;
|
||||
QueryResultSet qrs = null;
|
||||
|
||||
try
|
||||
{
|
||||
qrs = jdbcSupport.executeQuery(cn, sqlObj, ResultSet.TYPE_FORWARD_ONLY);
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throw new SqlDataSetSqlExecutionException(sql, t);
|
||||
}
|
||||
try
|
||||
{
|
||||
qrs = jdbcSupport.executeQuery(cn, sqlObj, ResultSet.TYPE_FORWARD_ONLY);
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throw new SqlDataSetSqlExecutionException(sql, t);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ResultSet rs = qrs.getResultSet();
|
||||
ResolvedDataSetResult result = resolveResult(cn, rs, properties, dataSetOption);
|
||||
TemplateResolvedDataSetResult dataSetResult = null;
|
||||
|
||||
return new TemplateResolvedDataSetResult(result.getResult(), result.getProperties(), sql);
|
||||
}
|
||||
catch (DataSetException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throw new DataSetException(t);
|
||||
try
|
||||
{
|
||||
ResultSet rs = qrs.getResultSet();
|
||||
ResolvedDataSetResult result = resolveResult(cn, rs, properties, dataSetOption);
|
||||
|
||||
dataSetResult = new TemplateResolvedDataSetResult(result.getResult(), result.getProperties(), sql);
|
||||
}
|
||||
catch (DataSetException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
throw new DataSetException(t);
|
||||
}
|
||||
|
||||
QueryResultSet.close(qrs);
|
||||
|
||||
return dataSetResult;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
QueryResultSet.close(qrs);
|
||||
}
|
||||
finally
|
||||
if (cn != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
getConnectionFactory().release(cn);
|
||||
}
|
||||
catch (Exception e)
|
||||
catch (Throwable t)
|
||||
{
|
||||
LOGGER.error("Release connection error", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* Copyright 2018 datagear.tech
|
||||
*
|
||||
* Licensed under the LGPLv3 license:
|
||||
* http://www.gnu.org/licenses/lgpl-3.0.html
|
||||
*/
|
||||
|
||||
|
@ -171,6 +171,9 @@ public abstract class AbstractSchemaConnController extends AbstractController
|
|||
|
||||
/**
|
||||
* 抽象模式连接执行器。
|
||||
* <p>
|
||||
* 注意:此类并非线程安全的。
|
||||
* </p>
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
|
@ -219,12 +222,11 @@ public abstract class AbstractSchemaConnController extends AbstractController
|
|||
|
||||
protected void doExecute() throws Throwable
|
||||
{
|
||||
this._schema = getSchemaForUserNotNull(request, response, schemaId);
|
||||
|
||||
springModel.addAttribute("schema", this._schema);
|
||||
|
||||
try
|
||||
{
|
||||
this._schema = getSchemaForUserNotNull(request, response, schemaId);
|
||||
springModel.addAttribute("schema", this._schema);
|
||||
|
||||
doExecute(request, response, springModel, this._schema);
|
||||
|
||||
if (!customCommit)
|
||||
|
@ -238,11 +240,20 @@ public abstract class AbstractSchemaConnController extends AbstractController
|
|||
}
|
||||
finally
|
||||
{
|
||||
if (this._cn != null)
|
||||
JdbcUtil.closeConnection(this._cn);
|
||||
JdbcUtil.closeConnection(this._cn);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前连接。
|
||||
* <p>
|
||||
* 注意:如果此方法在{@linkplain #doExecute(HttpServletRequest, HttpServletResponse, org.springframework.ui.Model, Schema)}内调用,
|
||||
* 则不需关闭连接,否则,需自行关闭连接。
|
||||
* </p>
|
||||
*
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
protected Connection getConnection() throws Exception
|
||||
{
|
||||
if (this._cn == null)
|
||||
|
@ -289,6 +300,9 @@ public abstract class AbstractSchemaConnController extends AbstractController
|
|||
|
||||
/**
|
||||
* 返回值{@linkplain AbstractSchemaConnExecutor}。
|
||||
* <p>
|
||||
* 注意:此类并非线程安全的。
|
||||
* </p>
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
|
@ -341,6 +355,9 @@ public abstract class AbstractSchemaConnController extends AbstractController
|
|||
|
||||
/**
|
||||
* 无返回值{@linkplain AbstractSchemaConnExecutor}。
|
||||
* <p>
|
||||
* 注意:此类并非线程安全的。
|
||||
* </p>
|
||||
*
|
||||
* @author datagear@163.com
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue