我正在基於Spring,Hibernate和Postgresql的分類廣告網站上工作。這些分類廣告的刊登時間從2周到6個月不等。 如何實施自動刪除過期分類廣告的解決方案? 最好從java層刪除它們或使用Postgresql調度程序?在有效日期後自動刪除數據庫行
在此先感謝。
我正在基於Spring,Hibernate和Postgresql的分類廣告網站上工作。這些分類廣告的刊登時間從2周到6個月不等。 如何實施自動刪除過期分類廣告的解決方案? 最好從java層刪除它們或使用Postgresql調度程序?在有效日期後自動刪除數據庫行
在此先感謝。
這是UNIX解決方案嗎?如果是這樣,請使用CRON調用PostgreSQL .sql腳本,該腳本會根據您需要的持續時間將其刪除。
因爲您已經在使用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執行。
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應用程序),因爲如果我遷移數據庫或操作系統,那麼我必須重寫它。
希望它可以幫助
此方法檢索對象超過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();
}
}
它,每天晚上運行着,當然你可以改變這種狀況。