perf[hint]: perfect orm autoconfig

This commit is contained in:
godotg
2023-09-04 23:31:16 +08:00
parent 19f2775a65
commit 9610a81ccf
3 changed files with 17 additions and 26 deletions
@@ -15,13 +15,16 @@ package com.zfoo.boot.graalvm;
import com.zfoo.orm.anno.GraalvmNativeEntityCache;
import com.zfoo.orm.config.OrmConfig;
import com.zfoo.protocol.util.ClassUtils;
import com.zfoo.storage.anno.GraalvmNativeStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/**
* Register runtime hints for the token library
@@ -38,28 +41,14 @@ public class GraalvmOrmHints implements RuntimeHintsRegistrar {
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
logger.info("orm graalvm aot runtime hints register");
var classes = new HashSet<Class<?>>();
var classes = new ArrayList<Class<?>>();
classes.add(OrmConfig.class);
// SSLMSA
classes.add(ClassUtils.forName("com.github.benmanes.caffeine.cache.SSLMSA"));
classes.add(ClassUtils.forName("com.github.benmanes.caffeine.cache.PSAMS"));
try {
// SSLMSA
classes.add(Class.forName("com.github.benmanes.caffeine.cache.SSLMSA"));
classes.add(Class.forName("com.github.benmanes.caffeine.cache.PSAMS"));
for (var className : ClassUtils.getAllClasses("")) {
try {
var clazz = Class.forName(className);
if (!clazz.isAnnotationPresent(GraalvmNativeEntityCache.class)) {
continue;
}
classes.add(clazz);
classes.addAll(ClassUtils.relevantClass(clazz));
} catch (Throwable t) {
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
var filterClasses = HintUtils.filterAllClass(clazz -> clazz.isAnnotationPresent(GraalvmNativeEntityCache.class));
classes.addAll(filterClasses);
for (var clazz : classes) {
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
@@ -12,7 +12,6 @@
package com.zfoo.boot.graalvm;
import com.zfoo.protocol.util.ClassUtils;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.storage.anno.GraalvmNativeStorage;
import com.zfoo.storage.config.StorageConfig;
@@ -25,7 +24,6 @@ import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import java.util.HashSet;
import java.util.function.Predicate;
/**
* Register runtime hints for the token library
@@ -49,7 +47,7 @@ public class GraalvmStorageHints implements RuntimeHintsRegistrar {
var filterClasses = HintUtils.filterAllClass(clazz -> clazz.isAnnotationPresent(GraalvmNativeStorage.class));
classes.addAll(filterClasses);
HintUtils.registerRelevantClass(hints, classes);
HintUtils.registerRelevantClasses(hints, classes);
for (var resource : StorageEnum.values()) {
var include = StringUtils.format("*.{}", resource.getType());
@@ -19,9 +19,9 @@ import org.springframework.aot.hint.RuntimeHints;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import static org.springframework.aot.hint.MemberCategory.*;
@@ -60,14 +60,18 @@ public abstract class HintUtils {
}
}
public static void registerRelevantClass(RuntimeHints hints, Set<Class<?>> classes) {
public static void registerRelevantClasses(RuntimeHints hints, Set<Class<?>> classes) {
var relevantClasses = classes.stream()
.map(it -> ClassUtils.relevantClass(it))
.flatMap(it -> it.stream())
.distinct()
.toList();
for (var clazz : relevantClasses) {
registerClasses(hints, relevantClasses);
}
public static void registerClasses(RuntimeHints hints, List<Class<?>> classes) {
for (var clazz : classes) {
hints.reflection().registerType(clazz, DECLARED_FIELDS, INVOKE_PUBLIC_CONSTRUCTORS, INVOKE_PUBLIC_METHODS);
logger.info("zfoo for graalvm aot hints register [{}]", clazz);
}