2016-04-29 71 views
2

我正在基於Spring,Hibernate和Postgresql的分類廣告網站上工作。這些分類廣告的刊登時間從2周到6個月不等。 如何實施自動刪除過期分類廣告的解決方案? 最好從java層刪除它們或使用Postgresql調度程序?在有效日期後自動刪除數據庫行

在此先感謝。

回答

0

這是UNIX解決方案嗎?如果是這樣,請使用CRON調用PostgreSQL .sql腳本,該腳本會根據您需要的持續時間將其刪除。

0

因爲您已經在使用Spring,您可以使用spring scheduler運行必要的DB查詢來刪除行。

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

deleteJob是一個簡單的Spring bean,其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 
    } 

我寧願它在春季(在Web應用程序),因爲如果我遷移數據庫或操作系統,那麼我必須重寫它。

希望它可以幫助

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

它,每天晚上運行着,當然你可以改變這種狀況。