增加SourceType

This commit is contained in:
redkale
2024-09-04 17:57:32 +08:00
parent 01c8aca36a
commit cfcb11ae61
3 changed files with 50 additions and 3 deletions

View File

@@ -32,6 +32,7 @@ import org.redkale.util.*;
@AutoLoad(false)
@SuppressWarnings("unchecked")
@ResourceType(DataSource.class)
@SourceType(DataJdbcSource.class)
public class DataJdbcSource extends AbstractDataSqlSource {
protected JdbcConnectionPool readPool;

View File

@@ -0,0 +1,34 @@
/*
* Copyright (c) 2016-2116 Redkale
* All rights reserved.
*/
package org.redkale.source;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 显式的指明Source多个资源类型。
*
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @since 2.8.0
*/
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@Repeatable(SourceType.SourceTypes.class)
public @interface SourceType {
Class value();
@Documented
@Target({TYPE})
@Retention(RUNTIME)
@interface SourceTypes {
SourceType[] value();
}
}

View File

@@ -35,6 +35,7 @@ import org.redkale.source.DataSources;
import org.redkale.source.DataSqlSource;
import org.redkale.source.SearchSource;
import org.redkale.source.SourceManager;
import org.redkale.source.SourceType;
import org.redkale.util.AnyValue;
import org.redkale.util.AnyValueWriter;
import org.redkale.util.InstanceProvider;
@@ -390,6 +391,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
loadCacheSource(sourceConf.getValue(AbstractCacheSource.CACHE_SOURCE_RESOURCE), autoMemory);
if (source != null) {
resourceFactory.register(sourceName, CacheSource.class, source);
for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) {
if (t.value() != CacheSource.class) {
resourceFactory.register(sourceName, t.value(), source);
}
}
}
return source;
}
@@ -403,6 +409,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
cacheSources.add(source);
resourceFactory.register(sourceName, CacheSource.class, source);
for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) {
if (t.value() != CacheSource.class) {
resourceFactory.register(sourceName, t.value(), source);
}
}
logger.info("Load CacheSource resourceName='" + sourceName + "', source=" + source + " in "
+ (System.currentTimeMillis() - st) + " ms");
return source;
@@ -464,8 +475,10 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
if (source instanceof DataSqlSource) {
resourceFactory.register(sourceName, DataSqlSource.class, source);
}
if (source instanceof DataJdbcSource) {
resourceFactory.register(sourceName, DataJdbcSource.class, source);
for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) {
if (t.value() != DataSqlSource.class) {
resourceFactory.register(sourceName, t.value(), source);
}
}
}
}
@@ -536,5 +549,4 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
((AnyValueWriter) conf).setValue("name", sourceName);
return conf;
}
}