Эх сурвалжийг харах

事件监听器异步启动

zuypeng 2 жил өмнө
parent
commit
f5053e6758

+ 5 - 2
miniapp/src/main/java/com/kym/miniapp/jobs/StartChargeDelayJob.java

@@ -14,6 +14,8 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import java.util.concurrent.DelayQueue;
@@ -51,8 +53,9 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
 
     @DS("db-miniapp")
     // 这里不能使用@PostConstruct,在初始化完成后, bean 进入增强阶段, 所以这个阶段的任何AOP都是无效的,https://www.cnblogs.com/eternityz/p/15330069.html
-    @EventListener
-    public void init(ContextRefreshedEvent event) {
+    @EventListener(classes = {ContextRefreshedEvent.class},id="StartChargeDelayJob")
+    @Async
+    public void init() {
         // 队列加载所有充电状态为预约中的订单,按照开始时间排序
         var orderList = chargeOrderService.lambdaQuery()
                 .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)

+ 5 - 3
miniapp/src/main/java/com/kym/miniapp/jobs/StopChargeDelayJob.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
 import java.util.concurrent.DelayQueue;
@@ -50,8 +51,9 @@ public class StopChargeDelayJob implements DelayService<DelayChargeOrder> {
 
     @DS("db-miniapp")
     // 这里不能使用@PostConstruct,在初始化完成后, bean 进入增强阶段, 所以这个阶段的任何AOP都是无效的,https://www.cnblogs.com/eternityz/p/15330069.html
-    @EventListener
-    public void init(ContextRefreshedEvent event) {
+    @EventListener(classes = {ContextRefreshedEvent.class},id="StopChargeDelayJob")
+    public void init() {
+        log.info("StopChargeDelayJob  init>>>>>>>");
         // 队列加载所有充电状态为预约中且有结束时间的订单,按照开始时间排序
         var orderList = chargeOrderService.lambdaQuery()
                 .eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中)
@@ -78,7 +80,7 @@ public class StopChargeDelayJob implements DelayService<DelayChargeOrder> {
         while (true) {
             executor.execute(() -> {
                 ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> null); // 初始化为空值,避免使用new ThreadLocal()
-                log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
+                log.info("预约停止充电订单处理线程:{}", Thread.currentThread().getName());
                 DelayedItem<DelayChargeOrder> delayedItem;
 
                 try {