From cc3c07d0c2ff73db10e08f95bf277f1093cb4b11 Mon Sep 17 00:00:00 2001 From: Redkale Date: Tue, 6 Dec 2022 13:38:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4SourceChangeable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/redkale/boot/Application.java | 22 +++++++++---------- .../redkale/source/AbstractCacheSource.java | 4 +++- .../redkale/source/AbstractDataSource.java | 5 ++++- .../org/redkale/source/CacheMemorySource.java | 4 ++-- .../org/redkale/source/DataJdbcSource.java | 9 ++++---- .../org/redkale/source/DataMemorySource.java | 3 ++- .../org/redkale/source/DataSqlSource.java | 4 ++-- .../org/redkale/source/SourceChangeable.java | 22 ------------------- .../org/redkale/util/ResourceListener.java | 2 +- 9 files changed, 30 insertions(+), 45 deletions(-) delete mode 100644 src/main/java/org/redkale/source/SourceChangeable.java diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index 16656c21a..e282f8476 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -404,8 +404,8 @@ public final class Application { AnyValue clusterConf = resources.getAnyValue("cluster"); if (clusterConf != null) { try { - String classval = clusterConf.getValue("type", clusterConf.getValue("value")); //兼容value字段 - if (classval == null || classval.isEmpty()) { + String classVal = clusterConf.getValue("type", clusterConf.getValue("value")); //兼容value字段 + if (classVal == null || classVal.isEmpty() || classVal.indexOf('.') < 0) { //不包含.表示非类名,比如值: consul, nacos Iterator it = ServiceLoader.load(ClusterAgentProvider.class, classLoader).iterator(); RedkaleClassLoader.putServiceLoader(ClusterAgentProvider.class); while (it.hasNext()) { @@ -426,7 +426,7 @@ public final class Application { } if (cluster == null) logger.log(Level.SEVERE, "load application cluster resource, but not found name='type' value error: " + clusterConf); } else { - Class type = classLoader.loadClass(classval); + Class type = classLoader.loadClass(classVal); if (!ClusterAgent.class.isAssignableFrom(type)) { logger.log(Level.SEVERE, "load application cluster resource, but not found " + ClusterAgent.class.getSimpleName() + " implements class error: " + clusterConf); } else { @@ -459,8 +459,8 @@ public final class Application { } } try { - String classval = mqConf.getValue("type", mqConf.getValue("value")); //兼容value字段 - if (classval == null || classval.isEmpty()) { + String classVal = mqConf.getValue("type", mqConf.getValue("value")); //兼容value字段 + if (classVal == null || classVal.isEmpty() || classVal.indexOf('.') < 0) { //不包含.表示非类名,比如值: kafka, pulsar Iterator it = ServiceLoader.load(MessageAgentProvider.class, classLoader).iterator(); RedkaleClassLoader.putServiceLoader(MessageAgentProvider.class); while (it.hasNext()) { @@ -474,7 +474,7 @@ public final class Application { } if (mqs[i] == null) logger.log(Level.SEVERE, "load application mq resource, but not found name='value' value error: " + mqConf); } else { - Class type = classLoader.loadClass(classval); + Class type = classLoader.loadClass(classVal); if (!MessageAgent.class.isAssignableFrom(type)) { logger.log(Level.SEVERE, "load application mq resource, but not found " + MessageAgent.class.getSimpleName() + " implements class error: " + mqConf); } else { @@ -1066,10 +1066,10 @@ public final class Application { logger.info("[" + Thread.currentThread().getName() + "] Load DataSource resourceName = " + sourceName + ", source = " + source); return source; } - String classval = sourceConf.getValue("type"); + String classVal = sourceConf.getValue("type"); try { DataSource source = null; - if (classval == null || classval.isEmpty()) { + if (classVal == null || classVal.isEmpty()) { if (DataJdbcSource.acceptsConf(sourceConf)) { source = new DataJdbcSource(); } else { @@ -1094,7 +1094,7 @@ public final class Application { } } } else { - Class sourceType = serverClassLoader.loadClass(classval); + Class sourceType = serverClassLoader.loadClass(classVal); RedkaleClassLoader.putReflectionPublicConstructors(sourceType, sourceType.getName()); source = (DataSource) sourceType.getConstructor().newInstance(); } @@ -1784,7 +1784,7 @@ public final class Application { events.add(ResourceEvent.create(k, v, null)); } }); - ((AbstractCacheSource) source).onChange(old == null ? conf : old, events.toArray(new ResourceEvent[events.size()])); + ((AbstractCacheSource) source).onResourceChange(events.toArray(new ResourceEvent[events.size()])); }); } AnyValue sourceNode = redNode.getAnyValue("datasource"); @@ -1802,7 +1802,7 @@ public final class Application { events.add(ResourceEvent.create(k, v, null)); } }); - ((AbstractDataSource) source).onChange(old == null ? conf : old, events.toArray(new ResourceEvent[events.size()])); + ((AbstractDataSource) source).onResourceChange(events.toArray(new ResourceEvent[events.size()])); }); } sourceProperties.putAll(sourceChangeCache); diff --git a/src/main/java/org/redkale/source/AbstractCacheSource.java b/src/main/java/org/redkale/source/AbstractCacheSource.java index 726ddbf39..8cbc5c8ee 100644 --- a/src/main/java/org/redkale/source/AbstractCacheSource.java +++ b/src/main/java/org/redkale/source/AbstractCacheSource.java @@ -18,7 +18,7 @@ import org.redkale.util.*; @AutoLoad(false) @SuppressWarnings("unchecked") @ResourceType(CacheSource.class) -public abstract class AbstractCacheSource extends AbstractService implements CacheSource, AutoCloseable, Resourcable, SourceChangeable { +public abstract class AbstractCacheSource extends AbstractService implements CacheSource, AutoCloseable, Resourcable { //@since 2.7.0 public static final String CACHE_SOURCE_URL = "url"; @@ -44,4 +44,6 @@ public abstract class AbstractCacheSource extends AbstractService implements Cac //@since 2.7.0 public static final String CACHE_SOURCE_PIPELINES = "pipelines"; + @ResourceListener + public abstract void onResourceChange(ResourceEvent[] events); } diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index 1eb032e42..c231cc71b 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -30,7 +30,7 @@ import org.redkale.util.*; @AutoLoad(false) @SuppressWarnings("unchecked") @ResourceType(DataSource.class) -public abstract class AbstractDataSource extends AbstractService implements DataSource, AutoCloseable, Resourcable, SourceChangeable { +public abstract class AbstractDataSource extends AbstractService implements DataSource, AutoCloseable, Resourcable { //@since 2.7.0 格式: x.x.x.x:yyyy public static final String DATA_SOURCE_PROXY_ADDRESS = "proxy-address"; @@ -92,6 +92,9 @@ public abstract class AbstractDataSource extends AbstractService implements Data //@since 2.7.0 public static final String DATA_SOURCE_TABLECOPY_SQLTEMPLATE = "tablecopy-sqltemplate"; + @ResourceListener + public abstract void onResourceChange(ResourceEvent[] events); + public static String parseDbtype(String url) { String dbtype = null; if (url == null) return dbtype; diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 42937d9ab..26ce7e765 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -62,8 +62,8 @@ public final class CacheMemorySource extends AbstractCacheSource { return "memory"; } - @Override - public void onChange(AnyValue newConf, ResourceEvent[] events) { + @ResourceListener + public void onResourceChange(ResourceEvent[] events) { } public static boolean acceptsConf(AnyValue config) { diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index a8f314ade..50f546278 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -49,7 +49,8 @@ public class DataJdbcSource extends DataSqlSource { } @Override - public void onChange(AnyValue newConf, ResourceEvent[] events) { + @ResourceListener + public void onResourceChange(ResourceEvent[] events) { //@TODO 待实现 } @@ -1099,7 +1100,7 @@ public class DataJdbcSource extends DataSqlSource { }; } - protected class ConnectionPool implements AutoCloseable, SourceChangeable { + protected class ConnectionPool implements AutoCloseable { protected final LongAdder closeCounter = new LongAdder(); //已关闭连接数 @@ -1140,8 +1141,8 @@ public class DataJdbcSource extends DataSqlSource { } } - @Override - public void onChange(AnyValue newConf, ResourceEvent[] events) { + @ResourceListener + public void onResourceChange(ResourceEvent[] events) { for (ResourceEvent event : events) { if (event.name().equals(DATA_SOURCE_CONNECTTIMEOUT_SECONDS) || event.name().endsWith("." + DATA_SOURCE_CONNECTTIMEOUT_SECONDS)) { this.connectTimeoutSeconds = Integer.decode(event.newValue().toString()); diff --git a/src/main/java/org/redkale/source/DataMemorySource.java b/src/main/java/org/redkale/source/DataMemorySource.java index bf72da5fd..de773c578 100644 --- a/src/main/java/org/redkale/source/DataMemorySource.java +++ b/src/main/java/org/redkale/source/DataMemorySource.java @@ -44,7 +44,8 @@ public class DataMemorySource extends DataSqlSource implements SearchSource { } @Override - public void onChange(AnyValue newConf, ResourceEvent[] events) { + @ResourceListener + public void onResourceChange(ResourceEvent[] events) { } public static boolean acceptsConf(AnyValue config) { diff --git a/src/main/java/org/redkale/source/DataSqlSource.java b/src/main/java/org/redkale/source/DataSqlSource.java index 0522e6a7d..d41d33d1c 100644 --- a/src/main/java/org/redkale/source/DataSqlSource.java +++ b/src/main/java/org/redkale/source/DataSqlSource.java @@ -119,8 +119,8 @@ public abstract class DataSqlSource extends AbstractDataSource implements Functi this.cacheForbidden = "NONE".equalsIgnoreCase(readConfProps.getProperty(DATA_SOURCE_CACHEMODE)); } - @Override - public void onChange(AnyValue newConf, ResourceEvent[] events) { + @ResourceListener + public void onResourceChange(ResourceEvent[] events) { //@TODO 待实现 } diff --git a/src/main/java/org/redkale/source/SourceChangeable.java b/src/main/java/org/redkale/source/SourceChangeable.java deleted file mode 100644 index 8909ffbeb..000000000 --- a/src/main/java/org/redkale/source/SourceChangeable.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * - */ -package org.redkale.source; - -import org.redkale.util.*; - -/** - * 资源变更回调接口 - * - *

- * 详情见: https://redkale.org - * - * @author zhangjx - * - * @since 2.8.0 - */ -public interface SourceChangeable { - - public void onChange(AnyValue newConf, ResourceEvent[] events); - -} diff --git a/src/main/java/org/redkale/util/ResourceListener.java b/src/main/java/org/redkale/util/ResourceListener.java index b5d497459..fcf199e23 100644 --- a/src/main/java/org/redkale/util/ResourceListener.java +++ b/src/main/java/org/redkale/util/ResourceListener.java @@ -11,7 +11,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * @Resource资源被更新时的监听事件, 本注解只能标记在方法参数为ResourceEvent[]上
- * 注意: 一个类只能存在一个@ResourceResourceListener的方法, 多余的会被忽略。 + * 注意: 一个类只能存在一个@ResourceListener的方法, 多余的会被忽略
* 方法在资源被更新以后调用。 * *