diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index a24f5c38b..2e7c3640e 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -31,7 +31,7 @@ import org.redkale.mq.*; import org.redkale.net.*; import org.redkale.net.http.*; import org.redkale.net.sncp.*; -import org.redkale.scheduling.ScheduleFactory; +import org.redkale.scheduling.ScheduleEngine; import org.redkale.service.Service; import org.redkale.source.*; import org.redkale.util.*; @@ -208,8 +208,8 @@ public final class Application { //全局根ResourceFactory final ResourceFactory resourceFactory = ResourceFactory.create(); - //全局ScheduledFactory - private final ScheduleFactory scheduledFactory; + //全局定时任务管理器 + private final ScheduleEngine scheduleEngine; //服务配置项 final AnyValue config; @@ -625,8 +625,9 @@ public final class Application { } } - { //设置ScheduledFactory - this.scheduledFactory = ScheduleFactory.create(this::getPropertyValue).disable(isCompileMode()); + { //设置定时管理 + this.scheduleEngine = ScheduleEngine.create(this::getPropertyValue).enabled(!isCompileMode()); + this.resourceFactory.register("", this.scheduleEngine); } { //加载原生sql解析器 @@ -2162,11 +2163,11 @@ public final class Application { } public void schedule(Object service) { - this.scheduledFactory.schedule(service); + this.scheduleEngine.schedule(service); } public void unschedule(Object service) { - this.scheduledFactory.unschedule(service); + this.scheduleEngine.unschedule(service); } void updateEnvironmentProperties(String namespace, List events) { @@ -2632,7 +2633,7 @@ public final class Application { if (this.workExecutor != null) { this.workExecutor.shutdownNow(); } - this.scheduledFactory.destroy(); + this.scheduleEngine.destroy(); long intms = System.currentTimeMillis() - f; String ms = String.valueOf(intms); @@ -2746,6 +2747,10 @@ public final class Application { return clusterAgent; } + public ScheduleEngine getScheduleEngine() { + return this.scheduleEngine; + } + public MessageAgent getMessageAgent(String name) { if (messageAgents == null) { return null; diff --git a/src/main/java/org/redkale/caching/CacheConfig.java b/src/main/java/org/redkale/caching/CacheConfig.java deleted file mode 100644 index 8f50110cc..000000000 --- a/src/main/java/org/redkale/caching/CacheConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - */ -package org.redkale.caching; - -import org.redkale.convert.json.JsonConvert; - -/** - * - * 缓存配置 - * - *

- * 详情见: https://redkale.org - * - * @author zhangjx - * - * @since 2.8.0 - */ -public class CacheConfig { - - private boolean enabled = true; - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public String toString() { - return JsonConvert.root().convertTo(this); - } - -} diff --git a/src/main/java/org/redkale/caching/CacheManagerService.java b/src/main/java/org/redkale/caching/CacheEngine.java similarity index 92% rename from src/main/java/org/redkale/caching/CacheManagerService.java rename to src/main/java/org/redkale/caching/CacheEngine.java index d69782fbe..612a15394 100644 --- a/src/main/java/org/redkale/caching/CacheManagerService.java +++ b/src/main/java/org/redkale/caching/CacheEngine.java @@ -5,13 +5,11 @@ package org.redkale.caching; import java.lang.reflect.Type; import java.time.Duration; -import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListSet; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.Component; -import org.redkale.annotation.Nonnull; import org.redkale.annotation.Nullable; import org.redkale.annotation.ResourceType; import org.redkale.service.Local; @@ -22,6 +20,7 @@ import org.redkale.util.AnyValue; import org.redkale.util.TypeToken; /** + * 缓存管理器 * * @author zhangjx */ @@ -29,10 +28,10 @@ import org.redkale.util.TypeToken; @Component @AutoLoad(false) @ResourceType(CacheManager.class) -public class CacheManagerService implements CacheManager, Service { +public class CacheEngine implements CacheManager, Service { //缓存配置项 - protected final CacheConfig config; + protected boolean enabled = true; //数据类型与CacheValue泛型的对应关系 private final ConcurrentHashMap cacheValueTypes = new ConcurrentHashMap<>(); @@ -46,26 +45,38 @@ public class CacheManagerService implements CacheManager, Service { //远程缓存Source protected CacheSource remoteSource; - protected CacheManagerService(@Nonnull CacheConfig config, @Nullable CacheSource remoteSource) { - this.config = Objects.requireNonNull(config); + protected CacheEngine(@Nullable CacheSource remoteSource) { this.remoteSource = remoteSource; } - public static CacheManagerService create(@Nonnull CacheConfig config, @Nullable CacheSource remoteSource) { - return new CacheManagerService(config, remoteSource); + public static CacheEngine create(@Nullable CacheSource remoteSource) { + return new CacheEngine(remoteSource); } @Override public void init(AnyValue conf) { - this.localSource.init(conf); + if (conf == null) { + conf = AnyValue.create(); + } + this.enabled = conf.getBoolValue("enabled", true); + if (this.enabled) { + this.localSource.init(conf); + } + } @Override public void destroy(AnyValue conf) { - this.localSource.destroy(conf); + if (this.enabled) { + this.localSource.destroy(conf); + } } - public CacheManagerService addHash(String hash) { + public boolean isEnabled() { + return enabled; + } + + public CacheEngine addHash(String hash) { this.hashNames.add(hash); return this; } @@ -223,7 +234,7 @@ public class CacheManagerService implements CacheManager, Service { public T bothGet(final String hash, final String key, final Type type) { Type t = loadCacheType(type); CacheValue val = localSource.hget(hash, key, t); - if (val != null && !val.isExpired()) { + if (CacheValue.isValid(val)) { return val.getValue(); } if (remoteSource != null) { @@ -246,7 +257,7 @@ public class CacheManagerService implements CacheManager, Service { public CompletableFuture bothGetAsync(final String hash, final String key, final Type type) { Type t = loadCacheType(type); CacheValue val = localSource.hget(hash, key, t); - if (val != null && !val.isExpired()) { + if (CacheValue.isValid(val)) { return CompletableFuture.completedFuture(val.getValue()); } if (remoteSource != null) { diff --git a/src/main/java/org/redkale/caching/CacheManager.java b/src/main/java/org/redkale/caching/CacheManager.java index c64f83bc3..102aa878a 100644 --- a/src/main/java/org/redkale/caching/CacheManager.java +++ b/src/main/java/org/redkale/caching/CacheManager.java @@ -8,7 +8,7 @@ import java.time.Duration; import java.util.concurrent.CompletableFuture; /** - * //TODO 待实现 + * 缓存管理器 * *

* 详情见: https://redkale.org diff --git a/src/main/java/org/redkale/caching/CacheValue.java b/src/main/java/org/redkale/caching/CacheValue.java index b3d1cfdf9..3d9b4a59d 100644 --- a/src/main/java/org/redkale/caching/CacheValue.java +++ b/src/main/java/org/redkale/caching/CacheValue.java @@ -9,7 +9,7 @@ import org.redkale.convert.json.JsonConvert; /** * - * 缓存对象 + * 内部缓存对象 * *

* 详情见: https://redkale.org @@ -36,8 +36,12 @@ public class CacheValue extends CacheExpire { return new CacheValue(value, expire); } + public static boolean isValid(CacheValue val) { + return val != null && !val.isExpired(); + } + public static T get(CacheValue val) { - return val != null && !val.isExpired() ? (T) val.getValue() : null; + return isValid(val) ? (T) val.getValue() : null; } public T getValue() { diff --git a/src/main/java/org/redkale/scheduling/ScheduleFactory.java b/src/main/java/org/redkale/scheduling/ScheduleEngine.java similarity index 94% rename from src/main/java/org/redkale/scheduling/ScheduleFactory.java rename to src/main/java/org/redkale/scheduling/ScheduleEngine.java index 562dff4ea..ef38d066e 100644 --- a/src/main/java/org/redkale/scheduling/ScheduleFactory.java +++ b/src/main/java/org/redkale/scheduling/ScheduleEngine.java @@ -25,14 +25,19 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.UnaryOperator; import java.util.logging.Level; import java.util.logging.Logger; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.Component; import org.redkale.annotation.Nullable; +import org.redkale.annotation.ResourceType; +import org.redkale.annotation.Scheduling; +import org.redkale.service.Local; +import org.redkale.service.Service; import org.redkale.util.RedkaleClassLoader; import org.redkale.util.RedkaleException; import org.redkale.util.Utility; -import org.redkale.annotation.Scheduling; /** - * 定时任务工厂 + * 定时任务管理器 * *

* 详情见: https://redkale.org @@ -40,7 +45,11 @@ import org.redkale.annotation.Scheduling; * @author zhangjx * @since 2.8.0 */ -public class ScheduleFactory { +@Local +@Component +@AutoLoad(false) +@ResourceType(ScheduleManager.class) +public class ScheduleEngine implements ScheduleManager, Service { protected final Logger logger = Logger.getLogger(this.getClass().getSimpleName()); @@ -53,23 +62,24 @@ public class ScheduleFactory { private final ScheduledThreadPoolExecutor scheduler; - private boolean disable; + private boolean enabled = true; - protected ScheduleFactory(UnaryOperator propertyFunc) { + protected ScheduleEngine(UnaryOperator propertyFunc) { this.propertyFunc = propertyFunc; this.scheduler = new ScheduledThreadPoolExecutor(Utility.cpus(), Utility.newThreadFactory("Scheduled-Task-Thread-%s")); this.scheduler.setRemoveOnCancelPolicy(true); } - public static ScheduleFactory create(UnaryOperator propertyFunc) { - return new ScheduleFactory(propertyFunc); + public static ScheduleEngine create(UnaryOperator propertyFunc) { + return new ScheduleEngine(propertyFunc); } - public ScheduleFactory disable(boolean val) { - this.disable = val; + public ScheduleEngine enabled(boolean val) { + this.enabled = val; return this; } + @Override public void unschedule(Object service) { lock.lock(); try { @@ -92,6 +102,7 @@ public class ScheduleFactory { } } + @Override public void schedule(Object service) { lock.lock(); try { @@ -124,7 +135,7 @@ public class ScheduleFactory { } } while ((clazz = clazz.getSuperclass()) != Object.class); //开始执行定时任务 - if (!disable && !tasks.isEmpty()) { + if (enabled && !tasks.isEmpty()) { tasks.forEach((name, task) -> task.start()); refTaskMap.put(ref, new ArrayList<>(tasks.values())); } diff --git a/src/main/java/org/redkale/scheduling/ScheduleManager.java b/src/main/java/org/redkale/scheduling/ScheduleManager.java new file mode 100644 index 000000000..ba0fec95a --- /dev/null +++ b/src/main/java/org/redkale/scheduling/ScheduleManager.java @@ -0,0 +1,31 @@ +/* + * + */ +package org.redkale.scheduling; + +/** + * 定时管理器 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + * + * @since 2.8.0 + */ +public interface ScheduleManager { + + /** + * 开启宿主对象中所有的定时任务方法 + * + * @param service 宿主对象 + */ + public void schedule(Object service); + + /** + * 关闭宿主对象中所有的定时任务方法 + * + * @param service 宿主对象 + */ + public void unschedule(Object service); +} diff --git a/src/test/java/org/redkale/test/caching/CachingTest.java b/src/test/java/org/redkale/test/caching/CachingTest.java index e1ab0ea8a..47e765aa9 100644 --- a/src/test/java/org/redkale/test/caching/CachingTest.java +++ b/src/test/java/org/redkale/test/caching/CachingTest.java @@ -6,8 +6,7 @@ package org.redkale.test.caching; import java.time.Duration; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.redkale.caching.CacheConfig; -import org.redkale.caching.CacheManagerService; +import org.redkale.caching.CacheEngine; import org.redkale.convert.json.JsonConvert; import org.redkale.source.CacheMemorySource; import org.redkale.util.Utility; @@ -27,7 +26,7 @@ public class CachingTest { public void run() throws Exception { CacheMemorySource remoteSource = new CacheMemorySource("remote"); remoteSource.init(null); - CacheManagerService cache = CacheManagerService.create(new CacheConfig(), remoteSource); + CacheEngine cache = CacheEngine.create(remoteSource); cache.init(null); Duration expire = Duration.ofMillis(490); cache.localSetString("user", "name:haha", "myha", expire); diff --git a/src/test/java/org/redkale/test/scheduling/ScheduleTest.java b/src/test/java/org/redkale/test/scheduling/ScheduleTest.java index 8af16f195..4aad9f709 100644 --- a/src/test/java/org/redkale/test/scheduling/ScheduleTest.java +++ b/src/test/java/org/redkale/test/scheduling/ScheduleTest.java @@ -4,7 +4,7 @@ package org.redkale.test.scheduling; import org.junit.jupiter.api.Test; -import org.redkale.scheduling.ScheduleFactory; +import org.redkale.scheduling.ScheduleEngine; import org.redkale.util.Utility; /** @@ -20,7 +20,7 @@ public class ScheduleTest { @Test public void run() throws Exception { - ScheduleFactory factory = ScheduleFactory.create(null); + ScheduleEngine factory = ScheduleEngine.create(null); ScheduleService service = new ScheduleService(); factory.schedule(service); Utility.sleep(3000);