Class SingleConnectionDataSource
- All Implemented Interfaces:
AutoCloseable
,Wrapper
,CommonDataSource
,DataSource
,DisposableBean
,SmartDataSource
SmartDataSource
that wraps a single JDBC Connection
which is not closed after use. Obviously, this is not multi-threading capable.
Note that at shutdown, someone should close the underlying Connection
via the close()
method. Client code will never call close
on the Connection handle if it is SmartDataSource-aware (e.g. uses
DataSourceUtils.releaseConnection
).
If client code will call close()
in the assumption of a pooled
Connection, like when using persistence tools, set "suppressClose" to "true".
This will return a close-suppressing proxy instead of the physical Connection.
This is primarily intended for testing. For example, it enables easy testing
outside an application server, for code that expects to work on a DataSource.
In contrast to DriverManagerDataSource
, it reuses the same Connection
all the time, avoiding excessive creation of physical Connections.
- Author:
- Rod Johnson, Juergen Hoeller
- See Also:
-
Field Summary
Fields inherited from class org.springframework.jdbc.datasource.AbstractDataSource
logger
-
Constructor Summary
ConstructorDescriptionConstructor for bean-style configuration.SingleConnectionDataSource
(String url, boolean suppressClose) Create a new SingleConnectionDataSource with the given standard DriverManager parameters.SingleConnectionDataSource
(String url, String username, String password, boolean suppressClose) Create a new SingleConnectionDataSource with the given standard DriverManager parameters.SingleConnectionDataSource
(Connection target, boolean suppressClose) Create a new SingleConnectionDataSource with a given Connection. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Close the underlying Connection.protected void
Close the underlying shared Connection.void
destroy()
Close the underlying Connection.protected Boolean
Return whether the returned Connection's "autoCommit" setting should be overridden.protected Connection
Wrap the given Connection with a proxy that delegates every method call to it but suppresses close calls.This implementation delegates togetConnectionFromDriver
, using the default username and password of this DataSource.getConnection
(String username, String password) Specifying a custom username and password doesn't make sense with a single Connection.void
Initialize the underlying Connection via the DriverManager.protected boolean
Return whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).protected boolean
Return whether the returned Connection will be a close-suppressing proxy or the physical Connection.protected void
Prepare the given Connection before it is exposed.void
Reset the underlying shared Connection, to be reinitialized on next access.void
setAutoCommit
(boolean autoCommit) Specify whether the returned Connection's "autoCommit" setting should be overridden.void
setRollbackBeforeClose
(boolean rollbackBeforeClose) Specify whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).void
setSuppressClose
(boolean suppressClose) Specify whether the returned Connection should be a close-suppressing proxy or the physical Connection.boolean
shouldClose
(Connection con) This is a single Connection: Do not close it when returning to the "pool".Methods inherited from class org.springframework.jdbc.datasource.DriverManagerDataSource
getConnectionFromDriver, getConnectionFromDriverManager, setDriverClassName
Methods inherited from class org.springframework.jdbc.datasource.AbstractDriverBasedDataSource
getCatalog, getConnectionFromDriver, getConnectionProperties, getPassword, getSchema, getUrl, getUsername, setCatalog, setConnectionProperties, setPassword, setSchema, setUrl, setUsername
Methods inherited from class org.springframework.jdbc.datasource.AbstractDataSource
getLoginTimeout, getLogWriter, getParentLogger, isWrapperFor, setLoginTimeout, setLogWriter, unwrap
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface javax.sql.CommonDataSource
createShardingKeyBuilder, getParentLogger
Methods inherited from interface javax.sql.DataSource
createConnectionBuilder, getLoginTimeout, getLogWriter, setLoginTimeout, setLogWriter
Methods inherited from interface java.sql.Wrapper
isWrapperFor, unwrap
-
Constructor Details
-
SingleConnectionDataSource
public SingleConnectionDataSource()Constructor for bean-style configuration. -
SingleConnectionDataSource
public SingleConnectionDataSource(String url, String username, String password, boolean suppressClose) Create a new SingleConnectionDataSource with the given standard DriverManager parameters.- Parameters:
url
- the JDBC URL to use for accessing the DriverManagerusername
- the JDBC username to use for accessing the DriverManagerpassword
- the JDBC password to use for accessing the DriverManagersuppressClose
- if the returned Connection should be a close-suppressing proxy or the physical Connection- See Also:
-
SingleConnectionDataSource
Create a new SingleConnectionDataSource with the given standard DriverManager parameters.- Parameters:
url
- the JDBC URL to use for accessing the DriverManagersuppressClose
- if the returned Connection should be a close-suppressing proxy or the physical Connection- See Also:
-
SingleConnectionDataSource
Create a new SingleConnectionDataSource with a given Connection.- Parameters:
target
- underlying target ConnectionsuppressClose
- if the Connection should be wrapped with a Connection that suppressesclose()
calls (to allow for normalclose()
usage in applications that expect a pooled Connection but do not know our SmartDataSource interface)
-
-
Method Details
-
setSuppressClose
public void setSuppressClose(boolean suppressClose) Specify whether the returned Connection should be a close-suppressing proxy or the physical Connection. -
isSuppressClose
protected boolean isSuppressClose()Return whether the returned Connection will be a close-suppressing proxy or the physical Connection. -
setRollbackBeforeClose
public void setRollbackBeforeClose(boolean rollbackBeforeClose) Specify whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).This is recommended for the Oracle JDBC driver in testing scenarios.
- Since:
- 6.1.2
-
isRollbackBeforeClose
protected boolean isRollbackBeforeClose()Return whether the shared Connection should be explicitly rolled back before close (if not in auto-commit mode).- Since:
- 6.1.2
-
setAutoCommit
public void setAutoCommit(boolean autoCommit) Specify whether the returned Connection's "autoCommit" setting should be overridden. -
getAutoCommitValue
Return whether the returned Connection's "autoCommit" setting should be overridden.- Returns:
- the "autoCommit" value, or
null
if none to be applied
-
getConnection
Description copied from class:AbstractDriverBasedDataSource
This implementation delegates togetConnectionFromDriver
, using the default username and password of this DataSource.- Specified by:
getConnection
in interfaceDataSource
- Overrides:
getConnection
in classAbstractDriverBasedDataSource
- Throws:
SQLException
- See Also:
-
getConnection
Specifying a custom username and password doesn't make sense with a single Connection. Returns the single Connection if given the same username and password; throws an SQLException else.- Specified by:
getConnection
in interfaceDataSource
- Overrides:
getConnection
in classAbstractDriverBasedDataSource
- Throws:
SQLException
- See Also:
-
shouldClose
This is a single Connection: Do not close it when returning to the "pool".- Specified by:
shouldClose
in interfaceSmartDataSource
- Parameters:
con
- the Connection to check- Returns:
- whether the given Connection should be closed
- See Also:
-
close
public void close()Close the underlying Connection. The provider of this DataSource needs to care for proper shutdown.As this class implements
AutoCloseable
, it can be used with a try-with-resource statement.- Specified by:
close
in interfaceAutoCloseable
- Since:
- 6.1.2
-
destroy
public void destroy()Close the underlying Connection. The provider of this DataSource needs to care for proper shutdown.As this bean implements
DisposableBean
, a bean factory will automatically invoke this on destruction of the bean.- Specified by:
destroy
in interfaceDisposableBean
-
initConnection
Initialize the underlying Connection via the DriverManager.- Throws:
SQLException
-
resetConnection
public void resetConnection()Reset the underlying shared Connection, to be reinitialized on next access. -
prepareConnection
Prepare the given Connection before it is exposed.The default implementation applies the auto-commit flag, if necessary. Can be overridden in subclasses.
- Parameters:
con
- the Connection to prepare- Throws:
SQLException
- See Also:
-
closeConnection
Close the underlying shared Connection.- Since:
- 6.1.2
-
getCloseSuppressingConnectionProxy
Wrap the given Connection with a proxy that delegates every method call to it but suppresses close calls.- Parameters:
target
- the original Connection to wrap- Returns:
- the wrapped Connection
-