簡體   English   中英

到期后自動刪除數據庫行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM