mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-16 16:25:54 +00:00
perf[hint]: perfect orm autoconfig
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user