From e47d11017af9eff6581591d5d73c1e55676b0955 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期四, 05 六月 2025 09:16:24 +0800 Subject: [PATCH] 优化执行内存 --- src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java | 71 ++++++++++++++++++++++++++++++++--- 1 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java b/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java index 2da0e50..dd9f7e5 100644 --- a/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java +++ b/src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java @@ -8,6 +8,9 @@ import org.springframework.stereotype.Component; import java.io.IOException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicBoolean; /** * 閲囪喘璁㈠崟鍚屾瀹氭椂浠诲姟 @@ -18,20 +21,76 @@ private static final Logger log = LoggerFactory.getLogger(PurchaseOrderSyncTask.class); private final PurchaseService purchaseService; + private final Executor purchaseTaskExecutor; // 娉ㄥ叆涓撶敤绾跨▼姹� + + // 鐢ㄤ簬鏍囪浠诲姟鏄惁姝e湪鎵ц + private final AtomicBoolean isRunning = new AtomicBoolean(false); /** * 瀹氭椂鎵ц閲囪喘璁㈠崟鍚屾浠诲姟 * 姣忓ぉ12鐐规暣鎵ц涓�娆� * 璁剧疆涓�12鐐�05鍒嗘墽琛岋紝閬垮厤涓庡叾浠栧畾鏃朵换鍔″啿绐� + * 浣跨敤寮傛鎵ц锛岄槻姝㈤樆濉炲叾浠栧畾鏃朵换鍔� */ @Scheduled(cron = "0 5 12 * * ?") public void syncPurchaseOrders() { - log.info("銆恠yncPurchaseOrders銆戝紑濮嬫墽琛岄噰璐鍗曞悓姝ヤ换鍔�"); - try { - purchaseService.syncPurchaseOrderDetails(); - log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�"); - } catch (IOException e) { - log.error("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e); + // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欒烦杩囨湰娆℃墽琛� + if (!isRunning.compareAndSet(false, true)) { + log.info("銆恠yncPurchaseOrders銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�"); + return; } + + log.info("銆恠yncPurchaseOrders銆戝紑濮嬫墽琛岄噰璐鍗曞悓姝ヤ换鍔�"); + + // 浣跨敤涓撶敤绾跨▼姹犳墽琛屽紓姝ヤ换鍔� + CompletableFuture.runAsync(() -> { + try { + log.info("銆恠yncPurchaseOrders銆戝紓姝ョ嚎绋嬪紑濮嬫墽琛岄噰璐鍗曞悓姝�"); + purchaseService.syncPurchaseOrderDetails(); + log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�"); + } catch (IOException e) { + log.error("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e); + } finally { + // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘灏嗚繍琛岀姸鎬侀噸缃� + isRunning.set(false); + log.info("銆恠yncPurchaseOrders銆戜换鍔$姸鎬佸凡閲嶇疆锛屽彲浠ユ帴鍙楁柊鐨勪换鍔�"); + } + }, purchaseTaskExecutor); + + // 涓嶇瓑寰呬换鍔″畬鎴愶紝绔嬪嵆杩斿洖锛岄伩鍏嶉樆濉炶皟搴︾嚎绋� + log.info("銆恠yncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔″凡鎻愪氦鍒板紓姝ョ嚎绋嬫墽琛�"); + } + + /** + * 鎵嬪姩瑙﹀彂閲囪喘璁㈠崟鍚屾浠诲姟 + * 鐢ㄤ簬绯荤粺绠$悊鍛樻墜鍔ㄨЕ鍙戝悓姝� + * + * @return 浠诲姟鏄惁宸叉彁浜ゆ墽琛� + */ + public boolean manualSyncPurchaseOrders() { + // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欐嫆缁濇湰娆℃墽琛� + if (!isRunning.compareAndSet(false, true)) { + log.info("銆恗anualSyncPurchaseOrders銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛屾嫆缁濇湰娆℃墽琛�"); + return false; + } + + log.info("銆恗anualSyncPurchaseOrders銆戞墜鍔ㄨЕ鍙戦噰璐鍗曞悓姝ヤ换鍔�"); + + // 浣跨敤涓撶敤绾跨▼姹犳墽琛屽紓姝ヤ换鍔� + CompletableFuture.runAsync(() -> { + try { + log.info("銆恗anualSyncPurchaseOrders銆戝紓姝ョ嚎绋嬪紑濮嬫墽琛岄噰璐鍗曞悓姝�"); + purchaseService.syncPurchaseOrderDetails(); + log.info("銆恗anualSyncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屾垚鍔�"); + } catch (IOException e) { + log.error("銆恗anualSyncPurchaseOrders銆戦噰璐鍗曞悓姝ヤ换鍔℃墽琛屽紓甯�: {}", e.getMessage(), e); + } finally { + // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘灏嗚繍琛岀姸鎬侀噸缃� + isRunning.set(false); + log.info("銆恗anualSyncPurchaseOrders銆戜换鍔$姸鎬佸凡閲嶇疆锛屽彲浠ユ帴鍙楁柊鐨勪换鍔�"); + } + }, purchaseTaskExecutor); + + return true; } } \ No newline at end of file -- Gitblit v1.9.3