SmartDataSource (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.jdbc.datasource

## Interface SmartDataSource

- All Superinterfaces:
    CommonDataSource, DataSource, Wrapper
  All Known Implementing Classes:
    SingleConnectionDataSource

      public interface SmartDataSource
      extends DataSource

  Extension of the `javax.sql.DataSource` interface, to be implemented by special DataSources that return JDBC Connections in an unwrapped fashion.

  Classes using this interface can query whether or not the Connection should be closed after an operation. Spring's DataSourceUtils and JdbcTemplate classes automatically perform such a check.

  Author:
    Rod Johnson, Juergen Hoeller
  See Also:
    `SingleConnectionDataSource.shouldClose(java.sql.Connection)`, `DataSourceUtils.releaseConnection(java.sql.Connection, javax.sql.DataSource)`, `JdbcTemplate`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `shouldClose(Connection con)` Should we close this Connection, obtained from this DataSource?

    - ### Methods inherited from interface javax.sql.DataSource

      `getConnection, getConnection`

    - ### Methods inherited from interface javax.sql.CommonDataSource

      `getLoginTimeout, getLogWriter, getParentLogger, setLoginTimeout, setLogWriter`

    - ### Methods inherited from interface java.sql.Wrapper

      `isWrapperFor, unwrap`

- - ### Method Detail

    - #### shouldClose

          boolean shouldClose(Connection con)

      Should we close this Connection, obtained from this DataSource?

      Code that uses Connections from a SmartDataSource should always perform a check via this method before invoking `close()`.

      Note that the JdbcTemplate class in the 'jdbc.core' package takes care of releasing JDBC Connections, freeing application code of this responsibility.

      Parameters:
        `con` - the Connection to check
      Returns:
        whether the given Connection should be closed
      See Also:
        `Connection.close()`