mirror of https://github.com/halo-dev/halo
refactor: use index mechanism to query extension point definitions (#6011)
#### What type of PR is this? /kind improvement /area core /kind milestone 2.16.x #### What this PR does / why we need it: 使用索引机制来查询扩展点定义 #### Does this PR introduce a user-facing change? ```release-note None ```pull/6009/head
parent
e881ee9a89
commit
9f6a441288
|
@ -72,7 +72,13 @@ public class SchemeInitializer implements ApplicationListener<ApplicationContext
|
|||
// plugin.halo.run
|
||||
schemeManager.register(Plugin.class);
|
||||
schemeManager.register(SearchEngine.class);
|
||||
schemeManager.register(ExtensionPointDefinition.class);
|
||||
schemeManager.register(ExtensionPointDefinition.class, indexSpecs -> {
|
||||
indexSpecs.add(new IndexSpec()
|
||||
.setName("spec.className")
|
||||
.setIndexFunc(simpleAttribute(ExtensionPointDefinition.class,
|
||||
definition -> definition.getSpec().getClassName())
|
||||
));
|
||||
});
|
||||
schemeManager.register(ExtensionDefinition.class);
|
||||
|
||||
schemeManager.register(RoleBinding.class);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
package run.halo.app.plugin.extensionpoint;
|
||||
|
||||
import static run.halo.app.extension.index.query.QueryFactory.equal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
@ -10,11 +11,16 @@ import org.pf4j.ExtensionPoint;
|
|||
import org.pf4j.PluginManager;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import run.halo.app.extension.ListOptions;
|
||||
import run.halo.app.extension.ListResult;
|
||||
import run.halo.app.extension.PageRequestImpl;
|
||||
import run.halo.app.extension.ReactiveExtensionClient;
|
||||
import run.halo.app.extension.router.selector.FieldSelector;
|
||||
import run.halo.app.infra.SystemConfigurableEnvironmentFetcher;
|
||||
import run.halo.app.infra.SystemSetting.ExtensionPointEnabled;
|
||||
|
||||
|
@ -109,11 +115,14 @@ public class DefaultExtensionGetter implements ExtensionGetter {
|
|||
|
||||
Mono<ExtensionPointDefinition> fetchExtensionPointDefinition(
|
||||
Class<? extends ExtensionPoint> extensionPoint) {
|
||||
// TODO Optimize query
|
||||
return client.list(ExtensionPointDefinition.class, definition ->
|
||||
extensionPoint.getName().equals(definition.getSpec().getClassName()),
|
||||
Comparator.comparing(definition -> definition.getMetadata().getCreationTimestamp())
|
||||
var listOptions = new ListOptions();
|
||||
listOptions.setFieldSelector(FieldSelector.of(
|
||||
equal("spec.className", extensionPoint.getName())
|
||||
));
|
||||
var sort = Sort.by("metadata.creationTimestamp", "metadata.name").ascending();
|
||||
return client.listBy(ExtensionPointDefinition.class, listOptions,
|
||||
PageRequestImpl.ofSize(1).withSort(sort)
|
||||
)
|
||||
.next();
|
||||
.flatMap(list -> Mono.justOrEmpty(ListResult.first(list)));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue