From fc228964fd077c26622dca89e01302c801c0bd18 Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 18 Dec 2023 23:42:18 +0800 Subject: [PATCH] =?UTF-8?q?ResourceFactory=E8=BF=81=E7=A7=BB=E5=88=B0injec?= =?UTF-8?q?t=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/module-info.java | 3 +- .../java/org/redkale/boot/Application.java | 3 + .../java/org/redkale/boot/LoggingModule.java | 2 +- .../java/org/redkale/boot/ModuleEngine.java | 4 +- .../java/org/redkale/boot/NodeHttpServer.java | 2 + .../java/org/redkale/boot/NodeServer.java | 2 + .../org/redkale/boot/PropertiesAgent.java | 1 + .../org/redkale/boot/PropertiesModule.java | 2 +- .../boot/watch/ServiceWatchService.java | 2 +- .../cache/support/CacheModuleEngine.java | 9 ++- .../redkale/cluster/CacheClusterAgent.java | 2 + .../org/redkale/cluster/ClusterAgent.java | 1 + .../redkale/cluster/ClusterModuleEngine.java | 2 +- .../redkale/{util => inject}/Resourcable.java | 2 +- .../ResourceAnnotationProvider.java | 2 +- .../{util => inject}/ResourceEvent.java | 3 +- .../{util => inject}/ResourceFactory.java | 11 ++- .../{util => inject}/ResourceTypeLoader.java | 2 +- .../java/org/redkale/mq/MessageAgent.java | 2 + .../org/redkale/mq/MessageModuleEngine.java | 8 +- src/main/java/org/redkale/net/Context.java | 1 + src/main/java/org/redkale/net/Server.java | 1 + .../java/org/redkale/net/client/Client.java | 1 + .../java/org/redkale/net/http/HttpServer.java | 1 + src/main/java/org/redkale/net/http/Rest.java | 1 + .../redkale/net/http/WebSocketServlet.java | 2 + src/main/java/org/redkale/net/sncp/Sncp.java | 4 +- .../java/org/redkale/net/sncp/SncpServer.java | 1 + .../org/redkale/schedule/ScheduleManager.java | 7 +- .../support/ScheduleManagerService.java | 81 +++++++++++-------- .../support/ScheduleModuleEngine.java | 9 ++- .../redkale/source/AbstractCacheSource.java | 3 + .../redkale/source/AbstractDataSource.java | 2 + .../redkale/source/AbstractDataSqlSource.java | 1 + .../org/redkale/source/CacheMemorySource.java | 1 + .../java/org/redkale/source/CacheSource.java | 1 + .../org/redkale/source/DataJdbcSource.java | 1 + .../org/redkale/source/DataMemorySource.java | 1 + .../java/org/redkale/source/DataSource.java | 1 + .../java/org/redkale/source/DataSources.java | 1 + .../redkale/source/SourceModuleEngine.java | 6 +- .../org/redkale/util/RedkaleClassLoader.java | 1 + .../test/http/HttpSimpleClientTest.java | 2 +- .../org/redkale/test/http/RestSleepTest.java | 1 + .../redkale/test/service/ABMainService.java | 1 + .../org/redkale/test/sncp/SncpSleepTest.java | 1 + .../java/org/redkale/test/sncp/SncpTest.java | 1 + .../test/sncp/SncpTestServiceImpl.java | 2 +- .../test/util/ResourceAnnotationTest.java | 3 +- .../test/util/ResourceListenerTest.java | 4 +- .../redkale/test/util/ResourceLoaderTest.java | 2 +- .../org/redkale/test/util/ResourceTest.java | 5 +- 52 files changed, 140 insertions(+), 75 deletions(-) rename src/main/java/org/redkale/{util => inject}/Resourcable.java (90%) rename src/main/java/org/redkale/{util => inject}/ResourceAnnotationProvider.java (92%) rename src/main/java/org/redkale/{util => inject}/ResourceEvent.java (95%) rename src/main/java/org/redkale/{util => inject}/ResourceFactory.java (97%) rename src/main/java/org/redkale/{util => inject}/ResourceTypeLoader.java (91%) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 01dae9a8a..ddeb9fb1e 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -25,6 +25,7 @@ module org.redkale { exports org.redkale.convert.ext; exports org.redkale.convert.json; exports org.redkale.convert.protobuf; + exports org.redkale.inject; exports org.redkale.lock; exports org.redkale.mq; exports org.redkale.net; @@ -42,10 +43,10 @@ module org.redkale { uses org.redkale.boot.PropertiesAgentProvider; uses org.redkale.cluster.ClusterAgentProvider; uses org.redkale.convert.ConvertProvider; + uses org.redkale.inject.ResourceAnnotationProvider; uses org.redkale.mq.MessageAgentProvider; uses org.redkale.source.CacheSourceProvider; uses org.redkale.source.DataSourceProvider; uses org.redkale.source.DataNativeSqlParserProvider; - uses org.redkale.util.ResourceAnnotationProvider; } diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index 1aa5b61d7..57a42e2eb 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -28,6 +28,9 @@ import org.redkale.convert.Convert; import org.redkale.convert.bson.BsonFactory; import org.redkale.convert.json.*; import org.redkale.convert.protobuf.ProtobufFactory; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; +import org.redkale.inject.ResourceTypeLoader; import org.redkale.mq.*; import org.redkale.net.*; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/boot/LoggingModule.java b/src/main/java/org/redkale/boot/LoggingModule.java index cd2b09497..cd4892d76 100644 --- a/src/main/java/org/redkale/boot/LoggingModule.java +++ b/src/main/java/org/redkale/boot/LoggingModule.java @@ -17,9 +17,9 @@ import java.util.Set; import java.util.logging.Handler; import java.util.logging.LogManager; import java.util.logging.SimpleFormatter; +import org.redkale.inject.ResourceEvent; import org.redkale.net.sncp.SncpClient; import org.redkale.util.Environment; -import org.redkale.util.ResourceEvent; /** * diff --git a/src/main/java/org/redkale/boot/ModuleEngine.java b/src/main/java/org/redkale/boot/ModuleEngine.java index 4399aa81c..6ae5df881 100644 --- a/src/main/java/org/redkale/boot/ModuleEngine.java +++ b/src/main/java/org/redkale/boot/ModuleEngine.java @@ -6,11 +6,11 @@ package org.redkale.boot; import java.util.List; import java.util.Properties; import java.util.logging.Logger; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; import org.redkale.service.Service; import org.redkale.util.AnyValue; import org.redkale.util.Environment; -import org.redkale.util.ResourceEvent; -import org.redkale.util.ResourceFactory; /** * diff --git a/src/main/java/org/redkale/boot/NodeHttpServer.java b/src/main/java/org/redkale/boot/NodeHttpServer.java index 0bb970e7e..46304c55d 100644 --- a/src/main/java/org/redkale/boot/NodeHttpServer.java +++ b/src/main/java/org/redkale/boot/NodeHttpServer.java @@ -17,6 +17,8 @@ import org.redkale.annotation.*; import static org.redkale.boot.Application.RESNAME_SNCP_ADDRESS; import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.cluster.ClusterAgent; +import org.redkale.inject.ResourceFactory; +import org.redkale.inject.ResourceTypeLoader; import org.redkale.mq.MessageAgent; import org.redkale.net.*; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/boot/NodeServer.java b/src/main/java/org/redkale/boot/NodeServer.java index 7dea90d69..9ed1506d7 100644 --- a/src/main/java/org/redkale/boot/NodeServer.java +++ b/src/main/java/org/redkale/boot/NodeServer.java @@ -21,6 +21,8 @@ import org.redkale.annotation.Command; import static org.redkale.boot.Application.*; import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.cluster.ClusterAgent; +import org.redkale.inject.ResourceFactory; +import org.redkale.inject.ResourceTypeLoader; import org.redkale.mq.*; import org.redkale.net.*; import org.redkale.net.Filter; diff --git a/src/main/java/org/redkale/boot/PropertiesAgent.java b/src/main/java/org/redkale/boot/PropertiesAgent.java index 58b6e2f24..50114adcb 100644 --- a/src/main/java/org/redkale/boot/PropertiesAgent.java +++ b/src/main/java/org/redkale/boot/PropertiesAgent.java @@ -4,6 +4,7 @@ package org.redkale.boot; import java.util.*; import java.util.logging.Logger; +import org.redkale.inject.ResourceEvent; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/boot/PropertiesModule.java b/src/main/java/org/redkale/boot/PropertiesModule.java index 9d2c3d91d..20e0aedff 100644 --- a/src/main/java/org/redkale/boot/PropertiesModule.java +++ b/src/main/java/org/redkale/boot/PropertiesModule.java @@ -16,11 +16,11 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Level; import java.util.logging.Logger; +import org.redkale.inject.ResourceEvent; import org.redkale.util.AnyValue; import org.redkale.util.Environment; import org.redkale.util.InstanceProvider; import org.redkale.util.RedkaleClassLoader; -import org.redkale.util.ResourceEvent; import org.redkale.util.Utility; /** diff --git a/src/main/java/org/redkale/boot/watch/ServiceWatchService.java b/src/main/java/org/redkale/boot/watch/ServiceWatchService.java index f250adaee..042d5c76b 100644 --- a/src/main/java/org/redkale/boot/watch/ServiceWatchService.java +++ b/src/main/java/org/redkale/boot/watch/ServiceWatchService.java @@ -11,9 +11,9 @@ import org.redkale.annotation.Comment; import org.redkale.annotation.*; import org.redkale.boot.*; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceFactory; import org.redkale.net.http.*; import org.redkale.service.RetResult; -import org.redkale.util.ResourceFactory; /** *

diff --git a/src/main/java/org/redkale/cache/support/CacheModuleEngine.java b/src/main/java/org/redkale/cache/support/CacheModuleEngine.java index 98f74526b..1a96381b3 100644 --- a/src/main/java/org/redkale/cache/support/CacheModuleEngine.java +++ b/src/main/java/org/redkale/cache/support/CacheModuleEngine.java @@ -5,6 +5,7 @@ package org.redkale.cache.support; import org.redkale.boot.Application; import org.redkale.boot.ModuleEngine; +import org.redkale.cache.CacheManager; import org.redkale.util.AnyValue; /** @@ -44,12 +45,12 @@ public class CacheModuleEngine extends ModuleEngine { public void onAppPostInit() { //设置缓存管理器 this.cacheManager = CacheManagerService.create(null).enabled(false); - final AnyValue cacheConf = application.getAppConfig().getAnyValue("cache");; - this.resourceFactory.inject(this.cacheManager); - if (!application.isCompileMode() && cacheConf != null) { + final AnyValue cacheConf = application.getAppConfig().getAnyValue("cache"); + if (cacheConf != null && !application.isCompileMode()) { + this.resourceFactory.inject(this.cacheManager); this.cacheManager.init(cacheConf); } - this.resourceFactory.register("", this.cacheManager); + this.resourceFactory.register("", CacheManager.class, this.cacheManager); } /** diff --git a/src/main/java/org/redkale/cluster/CacheClusterAgent.java b/src/main/java/org/redkale/cluster/CacheClusterAgent.java index 90a87d81f..4b30829ee 100644 --- a/src/main/java/org/redkale/cluster/CacheClusterAgent.java +++ b/src/main/java/org/redkale/cluster/CacheClusterAgent.java @@ -14,6 +14,8 @@ import org.redkale.annotation.*; import org.redkale.annotation.ResourceListener; import org.redkale.boot.*; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceEvent; import org.redkale.service.Service; import org.redkale.source.CacheSource; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/cluster/ClusterAgent.java b/src/main/java/org/redkale/cluster/ClusterAgent.java index 384ad37cb..1d08ca927 100644 --- a/src/main/java/org/redkale/cluster/ClusterAgent.java +++ b/src/main/java/org/redkale/cluster/ClusterAgent.java @@ -18,6 +18,7 @@ import org.redkale.boot.*; import static org.redkale.boot.Application.*; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceEvent; import org.redkale.net.Server; import org.redkale.net.http.*; import org.redkale.net.sncp.*; diff --git a/src/main/java/org/redkale/cluster/ClusterModuleEngine.java b/src/main/java/org/redkale/cluster/ClusterModuleEngine.java index 11bccb9b5..57bda5e67 100644 --- a/src/main/java/org/redkale/cluster/ClusterModuleEngine.java +++ b/src/main/java/org/redkale/cluster/ClusterModuleEngine.java @@ -14,10 +14,10 @@ import java.util.Set; import java.util.logging.Level; import org.redkale.boot.Application; import org.redkale.boot.ModuleEngine; +import org.redkale.inject.ResourceEvent; import org.redkale.util.AnyValue; import org.redkale.util.AnyValueWriter; import org.redkale.util.RedkaleClassLoader; -import org.redkale.util.ResourceEvent; /** * diff --git a/src/main/java/org/redkale/util/Resourcable.java b/src/main/java/org/redkale/inject/Resourcable.java similarity index 90% rename from src/main/java/org/redkale/util/Resourcable.java rename to src/main/java/org/redkale/inject/Resourcable.java index 03e64f35a..b0fe409cd 100644 --- a/src/main/java/org/redkale/util/Resourcable.java +++ b/src/main/java/org/redkale/inject/Resourcable.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.util; +package org.redkale.inject; /** * 对象的类没有标记为@Resource, 可以通过实现Resourcable接口实现动态获取Resource.name diff --git a/src/main/java/org/redkale/util/ResourceAnnotationProvider.java b/src/main/java/org/redkale/inject/ResourceAnnotationProvider.java similarity index 92% rename from src/main/java/org/redkale/util/ResourceAnnotationProvider.java rename to src/main/java/org/redkale/inject/ResourceAnnotationProvider.java index ef7fb2e17..a422bc755 100644 --- a/src/main/java/org/redkale/util/ResourceAnnotationProvider.java +++ b/src/main/java/org/redkale/inject/ResourceAnnotationProvider.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.util; +package org.redkale.inject; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/src/main/java/org/redkale/util/ResourceEvent.java b/src/main/java/org/redkale/inject/ResourceEvent.java similarity index 95% rename from src/main/java/org/redkale/util/ResourceEvent.java rename to src/main/java/org/redkale/inject/ResourceEvent.java index 4c1589b42..ccfbdd3a1 100644 --- a/src/main/java/org/redkale/util/ResourceEvent.java +++ b/src/main/java/org/redkale/inject/ResourceEvent.java @@ -1,11 +1,12 @@ /* */ -package org.redkale.util; +package org.redkale.inject; import java.util.*; import java.util.function.Predicate; import java.util.regex.Pattern; import org.redkale.annotation.ConstructorParameters; +import org.redkale.util.Utility; /** * 详情见: https://redkale.org diff --git a/src/main/java/org/redkale/util/ResourceFactory.java b/src/main/java/org/redkale/inject/ResourceFactory.java similarity index 97% rename from src/main/java/org/redkale/util/ResourceFactory.java rename to src/main/java/org/redkale/inject/ResourceFactory.java index 97df04024..a9284f4fb 100644 --- a/src/main/java/org/redkale/util/ResourceFactory.java +++ b/src/main/java/org/redkale/inject/ResourceFactory.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.util; +package org.redkale.inject; import java.lang.annotation.Annotation; import java.lang.ref.WeakReference; @@ -16,9 +16,11 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.*; import java.util.logging.*; import org.redkale.annotation.*; -import org.redkale.annotation.ResourceListener; -import org.redkale.annotation.ResourceType; import org.redkale.convert.*; +import org.redkale.util.Creator; +import org.redkale.util.RedkaleClassLoader; +import org.redkale.util.RedkaleException; +import org.redkale.util.TypeToken; /** * @@ -1222,7 +1224,8 @@ public final class ResourceFactory { RedkaleClassLoader.putReflectionMethod(loop.getName(), method); break; } else { - logger.log(Level.SEVERE, "@" + ResourceListener.class.getSimpleName() + " must on method with " + ResourceEvent.class.getSimpleName() + "[] parameter type"); + logger.log(Level.SEVERE, "@" + ResourceListener.class.getSimpleName() + + " must on method with " + ResourceEvent.class.getSimpleName() + "[] parameter type"); } } } while ((loop = loop.getSuperclass()) != Object.class); diff --git a/src/main/java/org/redkale/util/ResourceTypeLoader.java b/src/main/java/org/redkale/inject/ResourceTypeLoader.java similarity index 91% rename from src/main/java/org/redkale/util/ResourceTypeLoader.java rename to src/main/java/org/redkale/inject/ResourceTypeLoader.java index 262ec43f0..4af256db2 100644 --- a/src/main/java/org/redkale/util/ResourceTypeLoader.java +++ b/src/main/java/org/redkale/inject/ResourceTypeLoader.java @@ -1,6 +1,6 @@ /* */ -package org.redkale.util; +package org.redkale.inject; import java.lang.reflect.Field; diff --git a/src/main/java/org/redkale/mq/MessageAgent.java b/src/main/java/org/redkale/mq/MessageAgent.java index 727baedd2..84b3fdefe 100644 --- a/src/main/java/org/redkale/mq/MessageAgent.java +++ b/src/main/java/org/redkale/mq/MessageAgent.java @@ -25,6 +25,8 @@ import org.redkale.convert.Convert; import org.redkale.convert.ConvertFactory; import org.redkale.convert.ConvertType; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceEvent; import org.redkale.net.WorkThread; import org.redkale.net.http.*; import org.redkale.net.sncp.*; diff --git a/src/main/java/org/redkale/mq/MessageModuleEngine.java b/src/main/java/org/redkale/mq/MessageModuleEngine.java index 00a54a416..b134189c8 100644 --- a/src/main/java/org/redkale/mq/MessageModuleEngine.java +++ b/src/main/java/org/redkale/mq/MessageModuleEngine.java @@ -19,15 +19,15 @@ import org.redkale.boot.ClassFilter; import org.redkale.boot.ModuleEngine; import org.redkale.boot.NodeServer; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceAnnotationProvider; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; +import org.redkale.inject.ResourceTypeLoader; import org.redkale.net.http.RestException; import org.redkale.util.AnyValue; import org.redkale.util.AnyValueWriter; import org.redkale.util.RedkaleClassLoader; import org.redkale.util.RedkaleException; -import org.redkale.util.ResourceAnnotationProvider; -import org.redkale.util.ResourceEvent; -import org.redkale.util.ResourceFactory; -import org.redkale.util.ResourceTypeLoader; import org.redkale.util.Utility; /** diff --git a/src/main/java/org/redkale/net/Context.java b/src/main/java/org/redkale/net/Context.java index 261408807..2375e0536 100644 --- a/src/main/java/org/redkale/net/Context.java +++ b/src/main/java/org/redkale/net/Context.java @@ -12,6 +12,7 @@ import java.util.logging.*; import javax.net.ssl.SSLContext; import org.redkale.convert.bson.*; import org.redkale.convert.json.*; +import org.redkale.inject.ResourceFactory; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/net/Server.java b/src/main/java/org/redkale/net/Server.java index 793685034..a4084e163 100644 --- a/src/main/java/org/redkale/net/Server.java +++ b/src/main/java/org/redkale/net/Server.java @@ -14,6 +14,7 @@ import java.util.concurrent.atomic.LongAdder; import java.util.logging.*; import javax.net.ssl.SSLContext; import org.redkale.boot.Application; +import org.redkale.inject.ResourceFactory; import static org.redkale.net.AsyncGroup.UDP_BUFFER_CAPACITY; import org.redkale.net.Filter; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/client/Client.java b/src/main/java/org/redkale/net/client/Client.java index 84168e94a..245890eae 100644 --- a/src/main/java/org/redkale/net/client/Client.java +++ b/src/main/java/org/redkale/net/client/Client.java @@ -13,6 +13,7 @@ import java.util.function.*; import java.util.logging.Logger; import org.redkale.annotation.Nonnull; import org.redkale.annotation.Nullable; +import org.redkale.inject.Resourcable; import org.redkale.net.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/http/HttpServer.java b/src/main/java/org/redkale/net/http/HttpServer.java index a798a69c1..594ffda8e 100644 --- a/src/main/java/org/redkale/net/http/HttpServer.java +++ b/src/main/java/org/redkale/net/http/HttpServer.java @@ -17,6 +17,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.Supplier; import java.util.logging.Level; import org.redkale.boot.Application; +import org.redkale.inject.ResourceFactory; import org.redkale.mq.*; import org.redkale.net.Server; import org.redkale.net.http.HttpContext.HttpContextConfig; diff --git a/src/main/java/org/redkale/net/http/Rest.java b/src/main/java/org/redkale/net/http/Rest.java index 03878fb33..6ec2de230 100644 --- a/src/main/java/org/redkale/net/http/Rest.java +++ b/src/main/java/org/redkale/net/http/Rest.java @@ -22,6 +22,7 @@ import static org.redkale.asm.Opcodes.*; import org.redkale.asm.Type; import org.redkale.convert.*; import org.redkale.convert.json.*; +import org.redkale.inject.ResourceFactory; import org.redkale.mq.*; import org.redkale.net.*; import org.redkale.net.sncp.Sncp; diff --git a/src/main/java/org/redkale/net/http/WebSocketServlet.java b/src/main/java/org/redkale/net/http/WebSocketServlet.java index a7364adde..e36295da2 100644 --- a/src/main/java/org/redkale/net/http/WebSocketServlet.java +++ b/src/main/java/org/redkale/net/http/WebSocketServlet.java @@ -21,6 +21,8 @@ import org.redkale.annotation.Comment; import org.redkale.boot.Application; import static org.redkale.boot.Application.RESNAME_SERVER_RESFACTORY; import org.redkale.convert.Convert; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceFactory; import org.redkale.mq.MessageAgent; import org.redkale.net.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java index 9fccea090..af889916c 100644 --- a/src/main/java/org/redkale/net/sncp/Sncp.java +++ b/src/main/java/org/redkale/net/sncp/Sncp.java @@ -19,6 +19,8 @@ import static org.redkale.asm.Opcodes.*; import org.redkale.asm.Type; import org.redkale.convert.Convert; import org.redkale.convert.bson.BsonConvert; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceFactory; import org.redkale.mq.MessageAgent; import org.redkale.net.http.WebSocketNode; import org.redkale.net.sncp.SncpRemoteInfo.SncpRemoteAction; @@ -26,8 +28,6 @@ import org.redkale.schedule.Scheduled; import org.redkale.service.*; import org.redkale.util.AnyValue; import org.redkale.util.RedkaleClassLoader; -import org.redkale.util.Resourcable; -import org.redkale.util.ResourceFactory; import org.redkale.util.TypeToken; import org.redkale.util.Uint128; import org.redkale.util.Utility; diff --git a/src/main/java/org/redkale/net/sncp/SncpServer.java b/src/main/java/org/redkale/net/sncp/SncpServer.java index 6ffe30ac7..4fff82ef6 100644 --- a/src/main/java/org/redkale/net/sncp/SncpServer.java +++ b/src/main/java/org/redkale/net/sncp/SncpServer.java @@ -8,6 +8,7 @@ package org.redkale.net.sncp; import java.util.List; import java.util.concurrent.atomic.LongAdder; import org.redkale.boot.Application; +import org.redkale.inject.ResourceFactory; import org.redkale.net.Server; import org.redkale.net.sncp.SncpContext.SncpContextConfig; import org.redkale.service.Service; diff --git a/src/main/java/org/redkale/schedule/ScheduleManager.java b/src/main/java/org/redkale/schedule/ScheduleManager.java index f678de980..836ddf3a5 100644 --- a/src/main/java/org/redkale/schedule/ScheduleManager.java +++ b/src/main/java/org/redkale/schedule/ScheduleManager.java @@ -16,11 +16,14 @@ package org.redkale.schedule; public interface ScheduleManager { /** - * 开启宿主对象中所有的定时任务方法 + * 开启宿主对象中所有的定时任务方法. + * 存在定时任务方法返回true,否则返回false * * @param service 宿主对象 + * + * @return 存在定时任务方法返回true,否则返回false */ - public void schedule(Object service); + public boolean schedule(Object service); /** * 关闭宿主对象中所有的定时任务方法 diff --git a/src/main/java/org/redkale/schedule/support/ScheduleManagerService.java b/src/main/java/org/redkale/schedule/support/ScheduleManagerService.java index 38eb3ee9d..31e52f485 100644 --- a/src/main/java/org/redkale/schedule/support/ScheduleManagerService.java +++ b/src/main/java/org/redkale/schedule/support/ScheduleManagerService.java @@ -21,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; import java.util.function.UnaryOperator; import java.util.logging.Level; @@ -59,6 +60,8 @@ public class ScheduleManagerService implements ScheduleManager, Service { private final ConcurrentHashMap> refTaskMap = new ConcurrentHashMap<>(); + private final AtomicBoolean inited = new AtomicBoolean(); + private final ReentrantLock lock = new ReentrantLock(); @Resource(required = false) @@ -97,18 +100,24 @@ public class ScheduleManagerService implements ScheduleManager, Service { @Override public void init(AnyValue conf) { - this.config = conf; if (conf == null) { conf = AnyValue.create(); } - this.enabled = conf.getBoolValue("enabled", true); - if (this.enabled) { - if (this.propertyFunc == null && application != null) { - UnaryOperator func = application.getEnvironment()::getPropertyValue; - this.propertyFunc = func; + this.config = conf; + init(); + } + + private void init() { + if (inited.compareAndSet(false, true)) { + this.enabled = config.getBoolValue("enabled", true); + if (this.enabled) { + if (this.propertyFunc == null && application != null) { + UnaryOperator func = application.getEnvironment()::getPropertyValue; + this.propertyFunc = func; + } + this.scheduler = new ScheduledThreadPoolExecutor(Utility.cpus(), Utility.newThreadFactory("Scheduled-Task-Thread-%s")); + this.scheduler.setRemoveOnCancelPolicy(true); } - this.scheduler = new ScheduledThreadPoolExecutor(Utility.cpus(), Utility.newThreadFactory("Scheduled-Task-Thread-%s")); - this.scheduler.setRemoveOnCancelPolicy(true); } } @@ -117,39 +126,21 @@ public class ScheduleManagerService implements ScheduleManager, Service { if (scheduler != null) { scheduler.shutdown(); } + inited.set(false); + } + + public boolean isInited() { + return inited.get(); } @Override - public void unschedule(Object service) { - lock.lock(); - try { - Map.Entry> entry = null; - for (Map.Entry> item : refTaskMap.entrySet()) { - if (item.getKey().get() == service) { - entry = item; - break; - } - } - if (entry == null) { - return; - } - refTaskMap.remove(entry.getKey()); - for (ScheduledTask task : entry.getValue()) { - task.cancel(); - } - } finally { - lock.unlock(); - } - } - - @Override - public void schedule(Object service) { + public boolean schedule(Object service) { lock.lock(); try { for (WeakReference item : refTaskMap.keySet()) { if (item.get() == service) { logger.log(Level.WARNING, service + " repeat schedule"); - return; + return false; } } Map tasks = new LinkedHashMap<>(); @@ -179,6 +170,30 @@ public class ScheduleManagerService implements ScheduleManager, Service { tasks.forEach((name, task) -> task.start()); refTaskMap.put(ref, new ArrayList<>(tasks.values())); } + return !tasks.isEmpty(); + } finally { + lock.unlock(); + } + } + + @Override + public void unschedule(Object service) { + lock.lock(); + try { + Map.Entry> entry = null; + for (Map.Entry> item : refTaskMap.entrySet()) { + if (item.getKey().get() == service) { + entry = item; + break; + } + } + if (entry == null) { + return; + } + refTaskMap.remove(entry.getKey()); + for (ScheduledTask task : entry.getValue()) { + task.cancel(); + } } finally { lock.unlock(); } diff --git a/src/main/java/org/redkale/schedule/support/ScheduleModuleEngine.java b/src/main/java/org/redkale/schedule/support/ScheduleModuleEngine.java index af0d97569..e40ff2962 100644 --- a/src/main/java/org/redkale/schedule/support/ScheduleModuleEngine.java +++ b/src/main/java/org/redkale/schedule/support/ScheduleModuleEngine.java @@ -5,6 +5,7 @@ package org.redkale.schedule.support; import org.redkale.boot.Application; import org.redkale.boot.ModuleEngine; +import org.redkale.schedule.ScheduleManager; import org.redkale.service.Service; import org.redkale.util.AnyValue; @@ -45,12 +46,12 @@ public class ScheduleModuleEngine extends ModuleEngine { public void onAppPostInit() { //设置定时管理器 this.scheduleManager = ScheduleManagerService.create(null).enabled(false); - final AnyValue scheduleConf = application.getAppConfig().getAnyValue("schedule", true); - this.resourceFactory.inject(this.scheduleManager); - if (!application.isCompileMode()) { + final AnyValue scheduleConf = application.getAppConfig().getAnyValue("schedule"); + if (scheduleConf != null && !application.isCompileMode()) { + this.resourceFactory.inject(this.scheduleManager); this.scheduleManager.init(scheduleConf); } - this.resourceFactory.register("", this.scheduleManager); + this.resourceFactory.register("", ScheduleManager.class, this.scheduleManager); } /** diff --git a/src/main/java/org/redkale/source/AbstractCacheSource.java b/src/main/java/org/redkale/source/AbstractCacheSource.java index f410bb239..be8387ce1 100644 --- a/src/main/java/org/redkale/source/AbstractCacheSource.java +++ b/src/main/java/org/redkale/source/AbstractCacheSource.java @@ -6,6 +6,9 @@ import java.util.*; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; import org.redkale.service.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index 9d3173996..daa0924ff 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -19,6 +19,8 @@ import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; import static org.redkale.boot.Application.RESNAME_APP_EXECUTOR; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.Resourcable; +import org.redkale.inject.ResourceEvent; import org.redkale.net.WorkThread; import org.redkale.persistence.Entity; import org.redkale.service.*; diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index 5663353f4..56f120738 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -19,6 +19,7 @@ import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; import static org.redkale.boot.Application.*; +import org.redkale.inject.ResourceEvent; import org.redkale.net.AsyncGroup; import org.redkale.persistence.Table; import org.redkale.service.Local; diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index f28ca7f5a..d177e324a 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -23,6 +23,7 @@ import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; import org.redkale.convert.*; import org.redkale.convert.json.*; +import org.redkale.inject.ResourceEvent; import org.redkale.service.Local; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index 67ffa3b34..4da2b38df 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -15,6 +15,7 @@ import org.redkale.annotation.*; import org.redkale.convert.Convert; import org.redkale.convert.TextConvert; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.Resourcable; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index 95e96cc97..091b50e90 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -17,6 +17,7 @@ import org.redkale.annotation.*; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; +import org.redkale.inject.ResourceEvent; import org.redkale.service.Local; import static org.redkale.source.DataSources.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/DataMemorySource.java b/src/main/java/org/redkale/source/DataMemorySource.java index 160acb5a6..25c157c51 100644 --- a/src/main/java/org/redkale/source/DataMemorySource.java +++ b/src/main/java/org/redkale/source/DataMemorySource.java @@ -12,6 +12,7 @@ import java.util.stream.Stream; import org.redkale.annotation.AutoLoad; import org.redkale.annotation.ResourceListener; import org.redkale.annotation.ResourceType; +import org.redkale.inject.ResourceEvent; import org.redkale.service.Local; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/DataSource.java b/src/main/java/org/redkale/source/DataSource.java index e955795a2..456114a0b 100644 --- a/src/main/java/org/redkale/source/DataSource.java +++ b/src/main/java/org/redkale/source/DataSource.java @@ -10,6 +10,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; import org.redkale.annotation.Component; +import org.redkale.inject.Resourcable; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/source/DataSources.java b/src/main/java/org/redkale/source/DataSources.java index 0853db83d..fb9d6a3fd 100644 --- a/src/main/java/org/redkale/source/DataSources.java +++ b/src/main/java/org/redkale/source/DataSources.java @@ -8,6 +8,7 @@ package org.redkale.source; import java.io.*; import java.net.*; import java.util.*; +import org.redkale.inject.ResourceFactory; import org.redkale.service.Service; import org.redkale.util.*; import static org.redkale.util.Utility.isEmpty; diff --git a/src/main/java/org/redkale/source/SourceModuleEngine.java b/src/main/java/org/redkale/source/SourceModuleEngine.java index 061d64735..abd3a1728 100644 --- a/src/main/java/org/redkale/source/SourceModuleEngine.java +++ b/src/main/java/org/redkale/source/SourceModuleEngine.java @@ -19,6 +19,9 @@ import java.util.logging.Level; import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.boot.ModuleEngine; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; +import org.redkale.inject.ResourceTypeLoader; import org.redkale.net.Servlet; import org.redkale.net.sncp.Sncp; import org.redkale.service.Service; @@ -27,9 +30,6 @@ import org.redkale.util.AnyValueWriter; import org.redkale.util.InstanceProvider; import org.redkale.util.RedkaleClassLoader; import org.redkale.util.RedkaleException; -import org.redkale.util.ResourceEvent; -import org.redkale.util.ResourceFactory; -import org.redkale.util.ResourceTypeLoader; import org.redkale.util.Utility; /** diff --git a/src/main/java/org/redkale/util/RedkaleClassLoader.java b/src/main/java/org/redkale/util/RedkaleClassLoader.java index 79d551b35..156b05c49 100644 --- a/src/main/java/org/redkale/util/RedkaleClassLoader.java +++ b/src/main/java/org/redkale/util/RedkaleClassLoader.java @@ -55,6 +55,7 @@ public class RedkaleClassLoader extends URLClassLoader { "org.redkale.convert.ext", "org.redkale.convert.json", "org.redkale.convert.protobuf", + "org.redkale.inject", "org.redkale.lock", "org.redkale.mq", "org.redkale.net", diff --git a/src/test/java/org/redkale/test/http/HttpSimpleClientTest.java b/src/test/java/org/redkale/test/http/HttpSimpleClientTest.java index ce8118397..2ea3ce8c7 100644 --- a/src/test/java/org/redkale/test/http/HttpSimpleClientTest.java +++ b/src/test/java/org/redkale/test/http/HttpSimpleClientTest.java @@ -8,12 +8,12 @@ import java.util.concurrent.CountDownLatch; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.redkale.boot.Application; +import org.redkale.inject.ResourceFactory; import org.redkale.net.AsyncIOGroup; import org.redkale.net.http.HttpServer; import org.redkale.net.http.HttpSimpleClient; import org.redkale.net.http.HttpSimpleRequest; import org.redkale.util.AnyValueWriter; -import org.redkale.util.ResourceFactory; /** * diff --git a/src/test/java/org/redkale/test/http/RestSleepTest.java b/src/test/java/org/redkale/test/http/RestSleepTest.java index 917927521..67f1a62c5 100644 --- a/src/test/java/org/redkale/test/http/RestSleepTest.java +++ b/src/test/java/org/redkale/test/http/RestSleepTest.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.*; import org.redkale.boot.Application; import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceFactory; import org.redkale.net.AsyncIOGroup; import org.redkale.net.http.*; import org.redkale.net.sncp.Sncp; diff --git a/src/test/java/org/redkale/test/service/ABMainService.java b/src/test/java/org/redkale/test/service/ABMainService.java index a767a97a0..50b50201e 100644 --- a/src/test/java/org/redkale/test/service/ABMainService.java +++ b/src/test/java/org/redkale/test/service/ABMainService.java @@ -17,6 +17,7 @@ import org.redkale.annotation.Resource; import org.redkale.boot.*; import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceFactory; import org.redkale.net.AsyncIOGroup; import org.redkale.net.client.ClientAddress; import org.redkale.net.http.*; diff --git a/src/test/java/org/redkale/test/sncp/SncpSleepTest.java b/src/test/java/org/redkale/test/sncp/SncpSleepTest.java index d0aaf4482..7638f9b1d 100644 --- a/src/test/java/org/redkale/test/sncp/SncpSleepTest.java +++ b/src/test/java/org/redkale/test/sncp/SncpSleepTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.*; import org.redkale.boot.Application; import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.json.JsonConvert; +import org.redkale.inject.ResourceFactory; import org.redkale.net.AsyncIOGroup; import org.redkale.net.WorkThread; import org.redkale.net.client.ClientAddress; diff --git a/src/test/java/org/redkale/test/sncp/SncpTest.java b/src/test/java/org/redkale/test/sncp/SncpTest.java index f575abb5b..1abb98507 100644 --- a/src/test/java/org/redkale/test/sncp/SncpTest.java +++ b/src/test/java/org/redkale/test/sncp/SncpTest.java @@ -11,6 +11,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Test; import org.redkale.boot.*; import org.redkale.convert.bson.*; +import org.redkale.inject.ResourceFactory; import org.redkale.net.*; import org.redkale.net.client.ClientAddress; import org.redkale.net.sncp.*; diff --git a/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java b/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java index 2119d4604..cfead34a7 100644 --- a/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java +++ b/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java @@ -11,11 +11,11 @@ import java.nio.channels.CompletionHandler; import java.util.concurrent.CompletableFuture; import org.redkale.annotation.ResourceType; import org.redkale.boot.Application; +import org.redkale.inject.ResourceFactory; import org.redkale.net.AsyncIOGroup; import org.redkale.net.client.ClientAddress; import org.redkale.net.sncp.*; import org.redkale.service.*; -import org.redkale.util.ResourceFactory; /** * diff --git a/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java b/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java index 645d203a8..01038d6de 100644 --- a/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java +++ b/src/test/java/org/redkale/test/util/ResourceAnnotationTest.java @@ -12,7 +12,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.reflect.Field; import org.junit.jupiter.api.*; import org.redkale.convert.json.JsonConvert; -import org.redkale.util.*; +import org.redkale.inject.ResourceAnnotationProvider; +import org.redkale.inject.ResourceFactory; /** * diff --git a/src/test/java/org/redkale/test/util/ResourceListenerTest.java b/src/test/java/org/redkale/test/util/ResourceListenerTest.java index e0b0b1877..427999a41 100644 --- a/src/test/java/org/redkale/test/util/ResourceListenerTest.java +++ b/src/test/java/org/redkale/test/util/ResourceListenerTest.java @@ -4,9 +4,11 @@ package org.redkale.test.util; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; -import org.redkale.annotation.Resource; import org.junit.jupiter.api.*; +import org.redkale.annotation.Resource; import org.redkale.annotation.ResourceListener; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; import org.redkale.util.*; /** diff --git a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java b/src/test/java/org/redkale/test/util/ResourceLoaderTest.java index 6d0863c1b..9d58df26b 100644 --- a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java +++ b/src/test/java/org/redkale/test/util/ResourceLoaderTest.java @@ -5,7 +5,7 @@ package org.redkale.test.util; import org.junit.jupiter.api.*; import org.redkale.annotation.Resource; import org.redkale.convert.json.JsonFactory; -import org.redkale.util.ResourceFactory; +import org.redkale.inject.ResourceFactory; /** * diff --git a/src/test/java/org/redkale/test/util/ResourceTest.java b/src/test/java/org/redkale/test/util/ResourceTest.java index c4ae32897..5b5a9b567 100644 --- a/src/test/java/org/redkale/test/util/ResourceTest.java +++ b/src/test/java/org/redkale/test/util/ResourceTest.java @@ -8,10 +8,9 @@ package org.redkale.test.util; import java.math.BigInteger; import java.util.Properties; import org.junit.jupiter.api.Test; -import org.redkale.annotation.ConstructorParameters; import org.redkale.annotation.*; -import org.redkale.annotation.ResourceListener; -import org.redkale.util.*; +import org.redkale.inject.ResourceEvent; +import org.redkale.inject.ResourceFactory; /** *