Java 如何关闭DriverManager数据源连接?
我正在尝试关闭Java 如何关闭DriverManager数据源连接?,java,spring,jdbc,Java,Spring,Jdbc,我正在尝试关闭DriverManager数据源的连接,如下所示: public final class DbConnect { private static final Logger LOG = Logger.getLogger(DbConnect.class); public static DriverManagerDataSource getDataSource(String dbHost, int dbPort, String dbUser, String dbPassword, Str
DriverManager数据源的连接,如下所示:
public final class DbConnect {
private static final Logger LOG = Logger.getLogger(DbConnect.class);
public static DriverManagerDataSource getDataSource(String dbHost, int dbPort, String dbUser, String dbPassword, String dbSID)
{
LOG.info("getDataSource");
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("oracle.jdbc.OracleDriver");
ds.setUrl(String.format("jdbc:oracle:thin:@%s:%d:%s", dbHost, dbPort, dbSID));
LOG.info("url: " + ds.getUrl());
ds.setUsername(dbUser);
ds.setPassword(dbPassword);
try {
ds.getConnection().setAutoCommit(true);
} catch (SQLException e) {
LOG.info("Could not set db connecion to autocommit", e);
}
return ds;
}
/**
* Test connection to Database
* @param dbHost Database host name or IP
* @param dbPort Database port number
* @param dbUser Database user name
* @param dbPassword Database password
* @param dbSID Database service ID
* @return true if connection successful or throws CmException in case of failure
*/
public static boolean testConnection(String dbHost, int dbPort, String dbUser, String dbPassword, String dbSID) throws CmException
{
DriverManagerDataSource ds = getDataSource(dbHost, dbPort, dbUser, dbPassword, dbSID);
JdbcTemplate select = new JdbcTemplate(ds);
try {
select.queryForInt("SELECT 1 from DUAL");
} catch (Throwable ex){
LOG.info("Could not connect to DB: " + ex.getMessage(), ex);
throw new CmException(ex.getMessage());
} finally {
closeDBConnection(ds);
}
return true;
}
public static void closeDBConnection(DriverManagerDataSource ds)
{
LOG.debug("Close the DB connection");
if(ds == null) { return; }
try {
LOG.debug("Getting the connection from data source");
Connection conn = ds.getConnection();
if(conn != null) {
LOG.debug("Try closing the connection");
conn.close();
}
} catch (Exception ex) {
LOG.error("Could not close connection to DB: " + ex.getMessage(), ex);
}
}
}
}
但是请注意,连接没有关闭,我所做的是关闭打开的连接的正确方法吗?如果没有,我如何改进我的代码?您是否使用资源尝试了try
?像try(Connection conn=ds.getConnection()){…}catch(Exception ex){…}
?这将自动关闭连接。您在连接上关闭连接
而不是在数据源上关闭连接
用户尝试使用资源
或在最后关闭它
块什么不起作用?这个代码的目的是什么?您只需创建一个新连接并立即关闭它。你期待什么?我已经添加了完整的代码,在这里我调用了closeConnection
方法JdbcTemplate
为你关闭它。把那些讨厌的东西都拿走。