From cf8108eaaab16b773787d4db7e83f8a3a196598b Mon Sep 17 00:00:00 2001 From: zhouhao Date: Wed, 19 Jul 2017 16:27:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96jdbc=20executor,=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/datasource/DefaultJdbcExecutor.java | 13 +++++++++++-- hsweb-datasource/hsweb-datasource-jta/pom.xml | 6 ++++++ .../web/datasource/jta/JtaJdbcSqlExecutor.java | 12 +++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java index 563a4f14d..f64f409e4 100644 --- a/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java +++ b/hsweb-datasource/hsweb-datasource-api/src/main/java/org/hswebframework/web/datasource/DefaultJdbcExecutor.java @@ -16,14 +16,23 @@ import java.util.Objects; */ @Transactional(rollbackFor = Throwable.class) public class DefaultJdbcExecutor extends AbstractJdbcSqlExecutor { - + @Override public Connection getConnection() { - return DataSourceUtils.getConnection(DataSourceHolder.currentDataSource().getNative()); + DataSource dataSource = DataSourceHolder.currentDataSource().getNative(); + Connection connection = DataSourceUtils.getConnection(dataSource); + boolean isConnectionTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource); + if (logger.isDebugEnabled()) { + logger.debug("DataSource ({}) JDBC Connection [{}] will {}be managed by Spring", DataSourceHolder.switcher().currentDataSourceId(), connection, (isConnectionTransactional ? "" : "not ")); + } + return connection; } @Override public void releaseConnection(Connection connection) throws SQLException { + if (logger.isDebugEnabled()) { + logger.debug("Releasing DataSource ({}) JDBC Connection [{}]", DataSourceHolder.switcher().currentDataSourceId(), connection); + } DataSourceUtils.releaseConnection(connection, DataSourceHolder.currentDataSource().getNative()); } diff --git a/hsweb-datasource/hsweb-datasource-jta/pom.xml b/hsweb-datasource/hsweb-datasource-jta/pom.xml index 681a85462..4873da565 100644 --- a/hsweb-datasource/hsweb-datasource-jta/pom.xml +++ b/hsweb-datasource/hsweb-datasource-jta/pom.xml @@ -25,6 +25,12 @@ test + + net.sourceforge.jtds + jtds + test + + org.springframework spring-jdbc diff --git a/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java b/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java index 03030c5b7..23cc268f0 100644 --- a/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java +++ b/hsweb-datasource/hsweb-datasource-jta/src/main/java/org/hswebframework/web/datasource/jta/JtaJdbcSqlExecutor.java @@ -7,6 +7,7 @@ import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; @@ -20,11 +21,20 @@ import java.sql.SQLException; public class JtaJdbcSqlExecutor extends AbstractJdbcSqlExecutor { @Override public Connection getConnection() { - return DataSourceUtils.getConnection(DataSourceHolder.currentDataSource().getNative()); + DataSource dataSource = DataSourceHolder.currentDataSource().getNative(); + Connection connection = DataSourceUtils.getConnection(dataSource); + boolean isConnectionTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource); + if (logger.isDebugEnabled()) { + logger.debug("DataSource ({}) JDBC Connection [{}] will {}be managed by Spring", DataSourceHolder.switcher().currentDataSourceId(), connection, (isConnectionTransactional ? "" : "not ")); + } + return connection; } @Override public void releaseConnection(Connection connection) throws SQLException { + if (logger.isDebugEnabled()) { + logger.debug("Releasing DataSource ({}) JDBC Connection [{}]", DataSourceHolder.switcher().currentDataSourceId(), connection); + } DataSourceUtils.releaseConnection(connection, DataSourceHolder.currentDataSource().getNative()); }