diff --git a/src/main/java/org/apache/ibatis/datasource/pooled/PooledDataSource.java b/src/main/java/org/apache/ibatis/datasource/pooled/PooledDataSource.java index 718a8a5bdc3..20201a38d43 100644 --- a/src/main/java/org/apache/ibatis/datasource/pooled/PooledDataSource.java +++ b/src/main/java/org/apache/ibatis/datasource/pooled/PooledDataSource.java @@ -149,6 +149,18 @@ public void setDriverProperties(Properties driverProps) { forceCloseAll(); } + /** + * Sets the default network timeout value to wait for the database operation to complete. See {@link Connection#setNetworkTimeout(java.util.concurrent.Executor, int)} + * + * @param milliseconds + * The time in milliseconds to wait for the database operation to complete. + * @since 3.5.2 + */ + public void setDefaultNetworkTimeout(Integer milliseconds) { + dataSource.setDefaultNetworkTimeout(milliseconds); + forceCloseAll(); + } + /** * The maximum number of active connections. * @@ -263,6 +275,13 @@ public Properties getDriverProperties() { return dataSource.getDriverProperties(); } + /** + * @since 3.5.2 + */ + public Integer getDefaultNetworkTimeout() { + return dataSource.getDefaultNetworkTimeout(); + } + public int getPoolMaximumActiveConnections() { return poolMaximumActiveConnections; } diff --git a/src/main/java/org/apache/ibatis/datasource/unpooled/UnpooledDataSource.java b/src/main/java/org/apache/ibatis/datasource/unpooled/UnpooledDataSource.java index 0e857ba5716..31f43b8463f 100644 --- a/src/main/java/org/apache/ibatis/datasource/unpooled/UnpooledDataSource.java +++ b/src/main/java/org/apache/ibatis/datasource/unpooled/UnpooledDataSource.java @@ -25,6 +25,7 @@ import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; import java.util.logging.Logger; import javax.sql.DataSource; @@ -48,6 +49,7 @@ public class UnpooledDataSource implements DataSource { private Boolean autoCommit; private Integer defaultTransactionIsolationLevel; + private Integer defaultNetworkTimeout; static { Enumeration drivers = DriverManager.getDrivers(); @@ -182,6 +184,24 @@ public void setDefaultTransactionIsolationLevel(Integer defaultTransactionIsolat this.defaultTransactionIsolationLevel = defaultTransactionIsolationLevel; } + /** + * @since 3.5.2 + */ + public Integer getDefaultNetworkTimeout() { + return defaultNetworkTimeout; + } + + /** + * Sets the default network timeout value to wait for the database operation to complete. See {@link Connection#setNetworkTimeout(java.util.concurrent.Executor, int)} + * + * @param milliseconds + * The time in milliseconds to wait for the database operation to complete. + * @since 3.5.2 + */ + public void setDefaultNetworkTimeout(Integer defaultNetworkTimeout) { + this.defaultNetworkTimeout = defaultNetworkTimeout; + } + private Connection doGetConnection(String username, String password) throws SQLException { Properties props = new Properties(); if (driverProperties != null) { @@ -224,6 +244,9 @@ private synchronized void initializeDriver() throws SQLException { } private void configureConnection(Connection conn) throws SQLException { + if (defaultNetworkTimeout != null) { + conn.setNetworkTimeout(Executors.newSingleThreadExecutor(), defaultNetworkTimeout); + } if (autoCommit != null && autoCommit != conn.getAutoCommit()) { conn.setAutoCommit(autoCommit); } diff --git a/src/site/es/xdoc/configuration.xml b/src/site/es/xdoc/configuration.xml index 4cbb26685f1..935362f85d2 100644 --- a/src/site/es/xdoc/configuration.xml +++ b/src/site/es/xdoc/configuration.xml @@ -1627,7 +1627,7 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,properti

Hay tres tipos de dataSources pre-construidos (ej. type=”????”):

- UNPOOLED – Esta implementación de DataSource abre y cierra una conexión JDBC cada vez que se solcita una conexión. Aunque es un poco lento, es una buena elección para aplicaciones que no necesitan la velocidad de tener conexiones abiertas de forma inmediata. Las bases de datos tienen un rendimiento distinto en cuanto al rendimiento que aportan con este tipo de DataSource, para algunas de ellas no es muy importante tener un pool y por tanto esta configuración es apropiada. El DataSource UNPOOLED tiene cinco opciones de configuración: + UNPOOLED – Esta implementación de DataSource abre y cierra una conexión JDBC cada vez que se solcita una conexión. Aunque es un poco lento, es una buena elección para aplicaciones que no necesitan la velocidad de tener conexiones abiertas de forma inmediata. Las bases de datos tienen un rendimiento distinto en cuanto al rendimiento que aportan con este tipo de DataSource, para algunas de ellas no es muy importante tener un pool y por tanto esta configuración es apropiada. El DataSource UNPOOLED tiene las siguientes opciones de configuración:

Opcionalmente, puedes también pasar propiedades al driver de la base de datos. Para ello prefija las propiedades con “driver.”, por ejemplo:

diff --git a/src/site/ja/xdoc/configuration.xml b/src/site/ja/xdoc/configuration.xml index 3b968ae920d..548e7f5829b 100644 --- a/src/site/ja/xdoc/configuration.xml +++ b/src/site/ja/xdoc/configuration.xml @@ -1717,7 +1717,7 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,properti 少々遅いですが、即時の接続を必要としないシンプルなアプリケーションの場合は良い選択肢です。 パフォーマンスに関しては、お使いのデータベースによっても変わってきます。 接続プールの重要性が低いデータベースの場合はこの設定が最適となります。 - UNPOOLED データソースは5つのプロパティで設定できます。 + UNPOOLED データソースに対して設定可能なプロパティは下記の通りです。

オプションとして、データベースドライバーのプロパティを設定することもできます。 @@ -1749,7 +1751,7 @@ SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,properti Web アプリケーションでは応答速度向上のために良く使われる設定です。

- POOLED データソースには、UNPOOLED の設定で見た5つの他に様々なプロパティを指定することができます。 + POOLED データソースには、UNPOOLED に対して設定可能なプロパティに加えて以下を指定することができます。