2016-04-29 14 views
2

Я работаю над веб-сайтом, основанным на Spring, Hibernate и Postgresql для объявлений. У таких объявлений есть период публикации от 2 недель до 6 месяцев. Как я могу реализовать решение для автоматического удаления объявлений с истекшим сроком службы? Лучше удалить их из уровня java или с помощью планировщика Postgresql?Автоматически удалять строки базы данных по истечении срока действия

Заранее спасибо.

ответ

0

Является ли это решением UNIX? Если это так, используйте CRON для вызова скрипта PostgreSQL .sql, который удаляет их в зависимости от того, какая продолжительность вам кажется необходимой.

0

Поскольку вы уже используете Spring, вы можете использовать весенний планировщик для запуска необходимых запросов к БД для удаления строк.

<task:scheduled-tasks> 
    <task:scheduled ref="deleteJob" method="run" cron="0 * * * * *"/> 
</task:scheduled-tasks> 
<bean id="deleteJob" class="..."/> 

deleteJob - простой весенний боб с использованием метода run(), который будет выполнен на основе CRON.

1

Spring предлагает поддержку для планирования рабочих мест. Это возможно с помощью аннотации @Scheduled. Вы можете посмотреть на этом сайте

http://howtodoinjava.com/spring/spring-core/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/

т.е. запланировать задачу каждую минуту

@Override 
    @Scheduled(cron = "1 * * * * ?") 
    public final void updateTest() throws IOException { 
     //do something here 
    } 

Я предпочел бы, чтобы его весной (в веб-приложении), потому что если я перенастройки базы данных или операционной системы, тогда я должен ее переписать.

Надеется, что это помогает

0

Этого метод извлекает объекты старше 1 неделю и удаляет их в DAO слое:

@Override 
    @Scheduled(cron = "0 4 4 * * ?") 
    public void deleteChatMessagesAutomatically() { 
     if(schedulerActive.equals("true")) { 
      Session session = this.sessionFactory.getCurrentSession(); 
      long now = System.currentTimeMillis(); 
      long nowMinus1Week = now - (1000 * 60 * 60 * 24 * 7); 
      Timestamp nowMinus1WeekAsTimeStamp = new Timestamp(nowMinus1Week); 
      Query query = session.createQuery("from ChatMessages as cm where cm.sortTimeStamp <:limit"); 
      query.setParameter("limit", nowMinus1WeekAsTimeStamp); 
      List<ChatMessages> chatMessagesList = query.list(); 
      chatMessagesList.forEach(session::delete); 
      session.flush(); 
     } 
    } 

Он работает каждую ночь, конечно вы можете изменить это.