1. Обзор
В этом учебнике – мы продолжаем текущей Регистрация в весеннем совете серия настройка запланированной задачи для очистки истекла ПроверкаТокен секунда. В процессе регистрации ПроверкаТокен сохраняется. В этой статье мы покажем, как удалить эти сущности.
2. Удаление просроченного токена
Напомним, из предыдущей статьи в серии что токен проверки имеет срок действияDate , представляющий срок действия маркера:
@Entity public class VerificationToken { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String token; @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER) @JoinColumn(nullable = false, name = "user_id", foreignKey = @ForeignKey(name="FK_VERIFY_USER")) private User user; private Date expiryDate; ... }
Мы будем использовать этот срок действияDate свойства для генерации запроса с помощью Spring Data.
Если вы ищете более подробную информацию о весенних данных JPA, посмотрите на эту статью .
2.1. Операция по удалению
Для облегчения удаления токенов мы добавим новый метод в наш ПроверкаТокенРеспозиторий для удаления просроченных токенов:
public interface VerificationTokenRepository extends JpaRepository{ void deleteByExpiryDateLessThan(Date now); }
Использование запрос ключевых слов МеньшеТэн указывает на данные Spring Data создание запросов механизм, который нас интересует только токены, срок действияDate свойства меньше указанного времени.
Обратите внимание, что, ПроверкаТокен имеет @OneToOne связь с Пользователь отмечен FetchType.EAGER , также выдается выбор для заполнения Пользователь сущность – хотя подпись удалитьByExpiryDateLessThan имеет обратный тип недействительными :
select * from VerificationToken verification where verification.expiryDate < ? select * from user_account user where user.id=? delete from VerificationToken where id=?
2.2. Удаление с помощью JP’L
Кроме того, мы можем создать запрос JP’L, если у нас нет необходимости загружать объекты в контекст сохранения:
public interface VerificationTokenRepository extends JpaRepository{ @Modifying @Query("delete from VerificationToken t where t.expiryDate <= ?1") void deleteAllExpiredSince(Date now); }
И Hibernate не будет загружать сущности в контекст настойчивости:
delete from VerificationToken where expiryDate <= ?
3. Планирование задачи по очистке токенов
Теперь у нас есть запрос, который мы хотим выполнять периодически; Мы использовать поддержку планирования в весеннем и создать метод для запуска нашей логики удаления.
Если вы ищете более подробную информацию о структуре планирования весенних работ, посмотрите на эту статью.
3.1. Включить планирование
Для планирования задач мы создаем новый класс конфигурации ВеснаТаскКонфиг аннотировано @EnableScheduling :
@Configuration @EnableScheduling public class SpringTaskConfig { // }
3.2. Очистка токенов
В уровне обслуживания мы называем наш репозиторий текущим временем.
Затем мы аннотировать метод с @Scheduled чтобы указать, что Spring должен выполнять его периодически:
@Service @Transactional public class TokensPurgeTask { @Autowired private VerificationTokenRepository tokenRepository; @Scheduled(cron = "${purge.cron.expression}") public void purgeExpired() { Date now = Date.from(Instant.now()); tokenRepository.deleteAllExpiredSince(now); } }
3.3. Расписание
Мы использовали свойство для удержания значения параметров crontab, чтобы избежать компенсации при изменениях. В application.properts мы присваиваем значение:
# 5am every day purge.cron.expression=0 0 5 * * ?
4. Заключение
В этой статье мы решили удаление ПроверкаТокен s с использованием Весенние данные JPA .
Мы продемонстрировали создание запроса, используя выражение свойства, чтобы найти все токены, срок годности которых меньше указанного времени. И мы создали задачу, чтобы вызвать эту чистую логику во время выполнения – и зарегистрировали ее в структуре планирования весеннего задания, которая будет выполняться периодически.
Реализацию этого учебника по регистрации с помощью Spring Security можно найти в проект github – это проект на основе Eclipse, поэтому он должен быть легким для импорта и запуска, как она есть.