Поддерживает ли JDB C кеширование шаблона? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть веб-приложение java, которое будет читать, записывать и удалять информацию из пользовательской базы данных SQLite. Я использую JDBCtemplate для установки соединения, запроса к БД и обновления информации.

Я наблюдал одно поведение во время моих тестов:

Каждый раз, когда пользователи загружали новый файл базы данных SQLite (это будет имеет то же имя, находится в том же каталоге, что и старый файл БД), если они не перезагружают / перезапускают tomcat, jdbcquery сообщит, что исключение БД было повреждено.

Для меня это выглядело так, как будто JDBCtemplate как-то кешируется соединение и пытается возобновить соединение со старым БД?

Если это так, знаете ли вы в любом случае обновить sh соединение без перезагрузки приложения?

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);

1 Ответ

2 голосов
/ 22 февраля 2020

JDBCTemplate не обрабатывает соединение. Он получает соединение из установленного для него источника данных.

Из справочной документации для SingleConnectionDataSource

Реализация SmartDataSource, которая обертывает одну JDB C Соединение, которое не закрывается после использования. .....

Это в первую очередь предназначено для тестирования. Например, он позволяет легко тестировать вне сервера приложений код, который должен работать на источнике данных. В отличие от DriverManagerDataSource, он все время использует одно и то же соединение , избегая чрезмерного создания физических соединений.

A DriverManagerDataSource подойдет для вашего требования получить новое соединение без перезагрузки

Простая реализация стандартного интерфейса источника данных JDB C, настройка простого старого JDB C DriverManager через свойства компонента и r , создающий новое соединение из каждого Вызов getConnection.

Обновление

Мой ответ может не решить исходную проблему, но ответит только на вопрос о новом соединении без перезагрузки. Пожалуйста go через комментарий @ Тило к тому же.

...