diff --git a/scheduler/pom.xml b/scheduler/pom.xml
index 3100b1b5..6423b38b 100644
--- a/scheduler/pom.xml
+++ b/scheduler/pom.xml
@@ -57,6 +57,12 @@
${zfoo.version}
+
+ com.zfoo
+ event
+ ${zfoo.version}
+
+
org.javassist
javassist
diff --git a/scheduler/src/main/java/com/zfoo/scheduler/util/SingleCache.java b/scheduler/src/main/java/com/zfoo/scheduler/util/SingleCache.java
index af4da2a1..171870b7 100644
--- a/scheduler/src/main/java/com/zfoo/scheduler/util/SingleCache.java
+++ b/scheduler/src/main/java/com/zfoo/scheduler/util/SingleCache.java
@@ -13,9 +13,8 @@
package com.zfoo.scheduler.util;
-import com.zfoo.scheduler.manager.SchedulerBus;
+import com.zfoo.event.manager.EventBus;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
@@ -35,6 +34,11 @@ public class SingleCache {
private AtomicLong refreshTimeAtomic;
+ private SingleCache(long refreshDuration, Supplier supplier) {
+ this.refreshDuration = refreshDuration;
+ this.supplier = supplier;
+ this.refreshTimeAtomic = new AtomicLong(TimeUtils.now() + refreshDuration);
+ }
/**
* @param refreshDuration 刷新实际那,毫秒
@@ -42,11 +46,14 @@ public class SingleCache {
* @return 简单的缓存
*/
public static SingleCache build(long refreshDuration, Supplier supplier) {
- var cache = new SingleCache();
- cache.refreshDuration = refreshDuration;
- cache.supplier = supplier;
- cache.refreshTimeAtomic = new AtomicLong(TimeUtils.now() + refreshDuration);
- SchedulerBus.execute(() -> cache.cache = supplier.get());
+ var cache = new SingleCache(refreshDuration, supplier);
+ cache.cache = supplier.get();
+ return cache;
+ }
+
+ public static SingleCache lazyBuild(long refreshDuration, Supplier supplier) {
+ var cache = new SingleCache(refreshDuration, supplier);
+ EventBus.asyncExecute(cache.hashCode(), () -> cache.cache = supplier.get());
return cache;
}
@@ -69,7 +76,7 @@ public class SingleCache {
// 使用双重检测锁的方式
if (now > refreshTime) {
if (refreshTimeAtomic.compareAndSet(refreshTime, now + refreshDuration)) {
- SchedulerBus.execute(() -> cache = supplier.get());
+ EventBus.asyncExecute(cache.hashCode(), () -> cache = supplier.get());
}
}
return cache;