public class SingleConnectionDataSource extends DriverManagerDataSource implements SmartDataSource, org.springframework.beans.factory.DisposableBean
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.
getConnection(),
Connection.close(),
DataSourceUtils.releaseConnection(java.sql.Connection, javax.sql.DataSource)logger| Constructor and Description |
|---|
SingleConnectionDataSource()
Constructor for bean-style configuration.
|
SingleConnectionDataSource(Connection target,
boolean suppressClose)
Create a new SingleConnectionDataSource with a given Connection.
|
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.
|
| Modifier and Type | Method and Description |
|---|---|
void |
destroy()
Close the underlying Connection.
|
protected Boolean |
getAutoCommitValue()
Return whether the returned Connection's "autoCommit" setting should be overridden.
|
protected Connection |
getCloseSuppressingConnectionProxy(Connection target)
Wrap the given Connection with a proxy that delegates every method call to it
but suppresses close calls.
|
Connection |
getConnection()
This implementation delegates to
getConnectionFromDriver,
using the default username and password of this DataSource. |
Connection |
getConnection(String username,
String password)
Specifying a custom username and password doesn't make sense
with a single Connection.
|
void |
initConnection()
Initialize the underlying Connection via the DriverManager.
|
protected boolean |
isSuppressClose()
Return whether the returned Connection will be a close-suppressing proxy
or the physical Connection.
|
protected void |
prepareConnection(Connection con)
Prepare the given Connection before it is exposed.
|
void |
resetConnection()
Reset the underlying shared Connection, to be reinitialized on next access.
|
void |
setAutoCommit(boolean autoCommit)
Set whether the returned Connection's "autoCommit" setting should be overridden.
|
void |
setSuppressClose(boolean suppressClose)
Set 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".
|
getConnectionFromDriver, getConnectionFromDriverManager, setDriverClassNamegetCatalog, getConnectionFromDriver, getConnectionProperties, getPassword, getSchema, getUrl, getUsername, setCatalog, setConnectionProperties, setPassword, setSchema, setUrl, setUsernamegetLoginTimeout, getLogWriter, getParentLogger, isWrapperFor, setLoginTimeout, setLogWriter, unwrapclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetLoginTimeout, getLogWriter, getParentLogger, setLoginTimeout, setLogWriterisWrapperFor, unwrappublic SingleConnectionDataSource()
public SingleConnectionDataSource(String url, String username, String password, boolean suppressClose)
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 ConnectionDriverManager.getConnection(String, String, String)public SingleConnectionDataSource(String url, boolean suppressClose)
url - the JDBC URL to use for accessing the DriverManagersuppressClose - if the returned Connection should be a
close-suppressing proxy or the physical ConnectionDriverManager.getConnection(String, String, String)public SingleConnectionDataSource(Connection target, boolean suppressClose)
target - underlying target ConnectionsuppressClose - if the Connection should be wrapped with a Connection that
suppresses close() calls (to allow for normal close()
usage in applications that expect a pooled Connection but do not know our
SmartDataSource interface)public void setSuppressClose(boolean suppressClose)
protected boolean isSuppressClose()
public void setAutoCommit(boolean autoCommit)
@Nullable protected Boolean getAutoCommitValue()
null if none to be appliedpublic Connection getConnection() throws SQLException
AbstractDriverBasedDataSourcegetConnectionFromDriver,
using the default username and password of this DataSource.getConnection in interface DataSourcegetConnection in class AbstractDriverBasedDataSourceSQLExceptionAbstractDriverBasedDataSource.getConnectionFromDriver(String, String),
AbstractDriverBasedDataSource.setUsername(java.lang.String),
AbstractDriverBasedDataSource.setPassword(java.lang.String)public Connection getConnection(String username, String password) throws SQLException
getConnection in interface DataSourcegetConnection in class AbstractDriverBasedDataSourceSQLExceptionAbstractDriverBasedDataSource.getConnectionFromDriver(String, String)public boolean shouldClose(Connection con)
shouldClose in interface SmartDataSourcecon - the Connection to checkConnection.close()public void destroy()
As this bean implements DisposableBean, a bean factory will automatically invoke this on destruction of its cached singletons.
destroy in interface org.springframework.beans.factory.DisposableBeanpublic void initConnection()
throws SQLException
SQLExceptionpublic void resetConnection()
protected void prepareConnection(Connection con) throws SQLException
The default implementation applies the auto-commit flag, if necessary. Can be overridden in subclasses.
con - the Connection to prepareSQLExceptionsetAutoCommit(boolean)protected Connection getCloseSuppressingConnectionProxy(Connection target)
target - the original Connection to wrap