mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-09-10 02:17:57 +00:00
feat[graalvm]: storage graalvm support
This commit is contained in:
@@ -12,13 +12,24 @@
|
||||
|
||||
package com.zfoo.boot;
|
||||
|
||||
import com.zfoo.protocol.util.ClassUtils;
|
||||
import com.zfoo.protocol.util.StringUtils;
|
||||
import com.zfoo.storage.StorageContext;
|
||||
import com.zfoo.storage.manager.StorageManager;
|
||||
import com.zfoo.storage.model.anno.GraalvmNativeResource;
|
||||
import com.zfoo.storage.model.config.StorageConfig;
|
||||
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.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
|
||||
@@ -26,8 +37,11 @@ import org.springframework.context.annotation.Configuration;
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnBean(StorageConfig.class)
|
||||
@ImportRuntimeHints(StorageAutoConfiguration.StorageHints.class)
|
||||
public class StorageAutoConfiguration {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(StorageAutoConfiguration.class);
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnBean(StorageConfig.class)
|
||||
@@ -43,4 +57,46 @@ public class StorageAutoConfiguration {
|
||||
return new StorageContext();
|
||||
}
|
||||
|
||||
|
||||
// Register runtime hints for the token library
|
||||
public static class StorageHints implements RuntimeHintsRegistrar {
|
||||
|
||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar();
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
logger.info("storage aot runtime hints register");
|
||||
|
||||
var classes = new HashSet<Class<?>>();
|
||||
classes.add(ResourceData.class);
|
||||
|
||||
try {
|
||||
for (var className : ClassUtils.getAllClasses("")) {
|
||||
try {
|
||||
var clazz = Class.forName(className);
|
||||
if (!clazz.isAnnotationPresent(GraalvmNativeResource.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("storage 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user