增加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) @AutoLoad(false)
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ResourceType(DataSource.class) @ResourceType(DataSource.class)
@SourceType(DataJdbcSource.class)
public class DataJdbcSource extends AbstractDataSqlSource { public class DataJdbcSource extends AbstractDataSqlSource {
protected JdbcConnectionPool readPool; 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.DataSqlSource;
import org.redkale.source.SearchSource; import org.redkale.source.SearchSource;
import org.redkale.source.SourceManager; import org.redkale.source.SourceManager;
import org.redkale.source.SourceType;
import org.redkale.util.AnyValue; import org.redkale.util.AnyValue;
import org.redkale.util.AnyValueWriter; import org.redkale.util.AnyValueWriter;
import org.redkale.util.InstanceProvider; import org.redkale.util.InstanceProvider;
@@ -390,6 +391,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
loadCacheSource(sourceConf.getValue(AbstractCacheSource.CACHE_SOURCE_RESOURCE), autoMemory); loadCacheSource(sourceConf.getValue(AbstractCacheSource.CACHE_SOURCE_RESOURCE), autoMemory);
if (source != null) { if (source != null) {
resourceFactory.register(sourceName, CacheSource.class, 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);
}
}
} }
return source; return source;
} }
@@ -403,6 +409,11 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
cacheSources.add(source); cacheSources.add(source);
resourceFactory.register(sourceName, CacheSource.class, 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 " logger.info("Load CacheSource resourceName='" + sourceName + "', source=" + source + " in "
+ (System.currentTimeMillis() - st) + " ms"); + (System.currentTimeMillis() - st) + " ms");
return source; return source;
@@ -464,8 +475,10 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
if (source instanceof DataSqlSource) { if (source instanceof DataSqlSource) {
resourceFactory.register(sourceName, DataSqlSource.class, source); resourceFactory.register(sourceName, DataSqlSource.class, source);
} }
if (source instanceof DataJdbcSource) { for (SourceType t : source.getClass().getAnnotationsByType(SourceType.class)) {
resourceFactory.register(sourceName, DataJdbcSource.class, source); 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); ((AnyValueWriter) conf).setValue("name", sourceName);
return conf; return conf;
} }
} }