mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-03 05:20:50 +00:00
feat[graalvm]: orm graalvm support
This commit is contained in:
1 parent
02ae50ea10
commit
9bc3df8537
12 files changed
+146
-33
No files matched your search
@@ -15,12 +15,22 @@ package com.zfoo.boot;
|
||||
import com.zfoo.orm.OrmContext;
|
||||
import com.zfoo.orm.accessor.MongodbAccessor;
|
||||
import com.zfoo.orm.manager.OrmManager;
|
||||
import com.zfoo.orm.model.anno.GraalvmNativeEntityCache;
|
||||
import com.zfoo.orm.model.config.OrmConfig;
|
||||
import com.zfoo.orm.query.MongodbQuery;
|
||||
import com.zfoo.protocol.util.ClassUtils;
|
||||
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 org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.ImportRuntimeHints;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
* @author godotg
|
||||
@@ -28,8 +38,11 @@ import org.springframework.context.annotation.Configuration;
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnBean(OrmConfig.class)
|
||||
@ImportRuntimeHints(OrmAutoConfiguration.GraalvmOrmHints.class)
|
||||
public class OrmAutoConfiguration {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(OrmAutoConfiguration.class);
|
||||
|
||||
// OrmConfig in the specific business
|
||||
// If the OrmConfig bean is not configured in the business, then the Orm automatic assembly here will not take effect.
|
||||
@Bean
|
||||
@@ -59,4 +72,39 @@ public class OrmAutoConfiguration {
|
||||
return new OrmContext();
|
||||
}
|
||||
|
||||
|
||||
// Register runtime hints for the token library
|
||||
public static class GraalvmOrmHints implements RuntimeHintsRegistrar {
|
||||
|
||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
logger.info("orm graalvm aot runtime hints register");
|
||||
|
||||
var classes = new HashSet<Class<?>>();
|
||||
classes.add(OrmConfig.class);
|
||||
|
||||
try {
|
||||
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);
|
||||
}
|
||||
|
||||
for (var clazz : classes) {
|
||||
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
||||
logger.info("orm graalvm aot hints register serialization [{}]", clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,9 @@ import com.zfoo.storage.model.resource.ResourceData;
|
||||
import com.zfoo.storage.model.resource.ResourceEnum;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.aot.hint.*;
|
||||
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
|
||||
import org.springframework.aot.hint.RuntimeHints;
|
||||
import org.springframework.aot.hint.RuntimeHintsRegistrar;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -37,7 +39,7 @@ import java.util.HashSet;
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnBean(StorageConfig.class)
|
||||
@ImportRuntimeHints(StorageAutoConfiguration.StorageHints.class)
|
||||
@ImportRuntimeHints(StorageAutoConfiguration.GraalvmStorageHints.class)
|
||||
public class StorageAutoConfiguration {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(StorageAutoConfiguration.class);
|
||||
@@ -59,16 +61,17 @@ public class StorageAutoConfiguration {
|
||||
|
||||
|
||||
// Register runtime hints for the token library
|
||||
public static class StorageHints implements RuntimeHintsRegistrar {
|
||||
public static class GraalvmStorageHints implements RuntimeHintsRegistrar {
|
||||
|
||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
logger.info("storage aot runtime hints register");
|
||||
logger.info("storage graalvm aot runtime hints register");
|
||||
|
||||
var classes = new HashSet<Class<?>>();
|
||||
classes.add(ResourceData.class);
|
||||
classes.add(StorageConfig.class);
|
||||
|
||||
try {
|
||||
for (var className : ClassUtils.getAllClasses("")) {
|
||||
@@ -88,13 +91,13 @@ public class StorageAutoConfiguration {
|
||||
|
||||
for (var clazz : classes) {
|
||||
this.bindingRegistrar.registerReflectionHints(hints.reflection(), clazz);
|
||||
logger.info("storage aot hints register serialization [{}]", clazz);
|
||||
logger.info("storage graalvm aot hints register serialization [{}]", clazz);
|
||||
}
|
||||
|
||||
for (var resource : ResourceEnum.values()) {
|
||||
var include = StringUtils.format("*.{}", resource.getType());
|
||||
hints.resources().registerPattern(include);
|
||||
logger.info("storage aot hints register resources [{}]", include);
|
||||
logger.info("storage graalvm aot hints register resources [{}]", include);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user