[英]Auto delete database rows after an expiration date
我正在開發一個基於 Spring、Hibernate 和 Postgresql 的分類廣告網站。 這些分類廣告的發布期從 2 周到 6 個月不等。 如何實施自動刪除過期分類廣告的解決方案? 最好是從 java 層刪除它們還是使用 Postgresql 調度程序?
提前致謝。
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
}
我更喜歡在 Spring(在 Web 應用程序中)使用它,因為如果我遷移數據庫或操作系統,那么我必須重寫它。
希望能幫助到你
這是 UNIX 解決方案嗎? 如果是這樣,請使用 CRON 調用 PostgreSQL .sql 腳本,該腳本會在您認為需要的任何持續時間內刪除它們。
由於您已經在使用 Spring,您可以使用 spring 調度程序運行必要的數據庫查詢來刪除行。
<task:scheduled-tasks>
<task:scheduled ref="deleteJob" method="run" cron="0 * * * * *"/>
</task:scheduled-tasks>
<bean id="deleteJob" class="..."/>
deleteJob 是一個帶有 run() 方法的簡單 Spring bean,它將基於 CRON 執行。
此方法在 DAO 層檢索超過 1 周的對象並刪除它們:
@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();
}
}
它每晚運行,當然你可以改變它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.