前言:
在實際項目中會遇到需要單獨監控一個羣體對象的特殊對象的需求,如果只是採取直接從數據庫讀取的方式,在數據量較大的情況下可能導致阻塞。在此記錄分享我最近項目中的處理方式。僅代表個人見解,歡迎指正。
處理邏輯:
步驟一:設計一張數據表,用於持久化記錄需要監聽的對象
步驟二:新建一個工作類用於從數據庫讀取需要監聽的對象,並放置到一個全局的靜態隊列中;
public class TimerJob extends TimerTask {
private JdbcTemplate jdbcTemplate;
public TimerJob() {
}
public TimerJob(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void run() {
if (jdbcTemplate != null) {
List<String> list = new ArrayList<>();
jdbcTemplate.query(你的SQL, (ResultSet rs) -> {
do {
list.add(rs.getString(1));
} while (rs.next());
全局靜態隊列.clear();
全局靜態隊列.addAll(list);
}
);
}
}
步驟四:開啓一個線程,定時執行工作類,更新隊列信息
@PostConstruct
void init() {
Timer timer = new Timer();
TimerJob timerJob = new TimerJob(jdbcTemplate);
//更新頻率可以根據實際業務需求而定,我這邊是1天更新一次
timer.schedule(timerJob, 5000L, 1000 * 3600*24L);
}
步驟五:對比靜態隊列的信息,根據實際需求進行業務處理