使用資料庫統一對通知管理

2021-09-25 02:29:27 字數 859 閱讀 5175

最近在專案中,運用到了改變使用者狀態,實現訊息推送的功能,開始找了很多資料,都和實際的專案運用的不相符合,這裡總結下專案中如何解決問題(一般是使用觀察者模式),有興趣的可以具體了解,感覺和activemq的機制很像,實現發布訂閱和點對點的模式等等。

專案中的辦法是,使用一張中間表對資料統一進行管理,具體表結構如下:

使用的示例**如下:

sysmessage sysmessage = new sysmessage();

sysmessage.setcreated(new date());

sysmessage.setcontext("使用者發起整改驗收申請,通知驗收人驗收");

sysmessage.setsender(qsoptimizeinfodto.getowner());//執行人id

sysmessage.setreceiver(qsoptimizeinfodto.getvalidator());//驗收人id

sysmessage.settype(5);//qsopt(5, "quality_optimize")整改驗收類

sysmessage.setstate("unpush");

try ", "驗收申請訊息推送成功");

} catch (exception e) ", "驗收申請訊息推送失敗");

}

使用這種方式,定時任務會自動檢測,資料庫中sys_message的表中state狀態為unpush的資料,然後推送給接收人,同時,接收人操作之後改變狀態,不傳送訊息,(否則會定時傳送訊息,直到接收人處理之後)。

資料庫 一對一,一對多,多對多

一對一 就是說a表中的一條記錄對應著b表的一條記錄。大家可能會覺得這不是變得複雜了嗎?其實不然,如果,當一張表的字段過於太多,而很多字段可能只有在某些情況下,才會使用到,這時也可以考慮使用一對一設計。條件 建立單獨的表就行了,優點 1.便於管理 可提高一定的查詢速度 2.減輕 cpu 的 io 讀寫...

資料庫中表關係(一對多,多對多,一對一)

一對多關係是最普通的一種關係。在這種關係中,a 表中的一行可以匹配 b 表中的多行,但是 b 表中的一行只能匹配 a 表中的一行。例如,publishers和titles表之間具有一對多關係 每個出版社出版很多書,但是每本書名只能出自乙個出版社。只有當乙個相關列是乙個主鍵或具有唯一約束時,才能建立一...

資料庫中表關係(一對多,多對多,一對一)

一對多關係是最普通的一種關係。在這種關係中,a 表中的一行可以匹配 b 表中的多行,但是 b 表中的一行只能匹配 a 表中的一行。例如,publishers和titles表之間具有一對多關係 每個出版社出版很多書,但是每本書名只能出自乙個出版社。只有當乙個相關列是乙個主鍵或具有唯一約束時,才能建立一...