JDBC模板缓存连接吗



我有一个javaspringweb应用程序,它将从用户上传的SQLiteDB中读取、写入和删除信息。我正在使用JDBCtemplate来设置连接、查询数据库和更新信息。

我在测试中观察到一种行为:

每次,用户上传一个新的SQLite数据库文件(它将与旧的数据库文件同名,放在同一目录下(后,如果他们不重新启动tomcat,jdbcquery将报告数据库已损坏的异常。

对我来说,这看起来像是JDBCtemplate以某种方式缓存了连接,并试图恢复与旧数据库的连接?

如果是,你知道在不重新启动应用程序的情况下刷新连接吗?

final SingleConnectionDataSource dataSource = new singleConnectionDataSource();
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
throw new applicationException(MessageTemplateNames.GENERAL_UNKNOWN_ERROR, e);
}
createDirectoryForDbIfNotExists();
dataSource.setUrl(String.format("%s%s", JDBC.PREFIX, getDbFileLocation()));
dataSource.setAutoCommit(true);

JDBCTemplate不处理连接。它从设置到它的数据源获得连接。

来自SingleConnectionDataSource 的参考文档

包装单个JDBC连接的SmartDataSource的实现使用后未关闭。。。。。

这主要用于测试。例如,它使在应用程序服务器外部进行测试,以获取期望工作的代码在DataSource上。与DriverManagerDataSource相反,重用始终保持相同的连接,避免过度创建物理连接。

DriverManagerDataSource将满足您在不重新启动的情况下获得新连接的要求

标准JDBC DataSource接口的简单实现,通过bean属性配置普通的旧JDBC DriverManager,以及r从每个getConnection调用中恢复一个新的Connection

更新

我的答案可能无法解决您最初的问题,但只会在不重新启动的情况下回答新连接的问题。请浏览@Thilo对此的评论。

最新更新