Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Таймер для удаления записей в БД JSP


Автор: Tsyklop 27.4.2016, 13:59
Делаю сайт на JSP. В базу данных(в отдельную таблицу) записываю юзеров при авторизации(лоиг, хеш), так же создаются куки сроком на час(временно). И возникла потребность автоматически удалять записи в бд(в браузерах куки сами очищаются через указанное время). Собственно - как это можно сделать? Погуглв понял что можно сделать ивент в самой MYSql, можно запускать на сервере отдельный потом(Thread) и делать ему sleep и после этого очищать записи. Всё бы ничего но есть один маленький нюанс. Все эти методы будут удалять все записи ибо(по логике) время будет у всех не то что на данный момент (NOW()). Вот пример как это делать в MySql:

Код

-- Процедура удаления старых записей
CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteTime`()
    COMMENT 'Удаляем старые записи'
BEGIN
      DELETE FROM MEMORY WHERE time < (NOW() - INTERVAL 1 HOUR) LIMIT 1;
END

-- Событие срабатывающее каждый 5 минут
CREATE EVENT `deleteEvent` 
    ON SCHEDULE EVERY 5 MINUTE STARTS CURRENT_TIMESTAMP
    ON COMPLETION NOT PRESERVE ENABLE 
    COMMENT 'Событие вызывающее процедуру удаления старых записей'
    DO call deleteTime()


Таким же образом будет работать и Отдельный поток - там будет посылаться запрос и всё: 
Код

DELETE FROM MEMORY WHERE time < (NOW() - INTERVAL 1 HOUR) LIMIT 1;


Мне же нужно что бы записи удалялись только те которые были созданы час назад(+- пару минут). А те которые были созданы в течении этого часа оставались.

Это реально?

Автор: LSD 27.4.2016, 17:42
user posted image

З.Ы. Используй стандартную сессию сервера приложений.

Автор: Tsyklop 28.4.2016, 11:01
Цитата(LSD @ 27.4.2016,  17:42)


З.Ы. Используй стандартную сессию сервера приложений.

а что стандартная сессия сервера? мне нужно удалять запись в бд автоматически... 

Автор: LSD 28.4.2016, 16:14
Цитата(Tsyklop @  28.4.2016,  12:01 Найти цитируемый пост)
а что стандартная сессия сервера? мне нужно удалять запись в бд автоматически... 

Любой приличный сервер умеет хранить сессии в БД и умеет их удалять через заданный интервал неактивности.

Автор: drgnav 28.4.2016, 17:52
Добрый день, не совсем понял, для чено запоминать пользователей в базе.
Если это не для того, чтобы как-то управлять сессией пользователя по времени, то это все нужно делать другим способом. Хотелось бы понять проблему на бизнес уровне, а не на уровне реализации.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Taymer-dlya-udaleniya-zapisey-v-BD-JSP-id57209bb4ae201522788b456c#findElement_E7045_572223b6ae2015c64e62e3b2_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)