Skip to content

Latest commit

 

History

History
90 lines (76 loc) · 2.65 KB

graalvm.md

File metadata and controls

90 lines (76 loc) · 2.65 KB

database

Eloquent ORM for Java

目录

总览

database-spring-boot-starter 支持了graalVM的构建, 目前算是半自动吧.
需要手动在配置类上增加对应的注解. 目前运行在 graalVM 还有很多的与 jvm不同的地方, 详见注意事项

配置注解

@NativeHint(
    types = @TypeHint(types = {
        // entity
        // ...

        GeneralModel.class,
        GeneralModel.Table.class
    }),
    jdkProxies = @JdkProxyHint(types = {
        // interface
        // ...

        Model.class,
        SoftDelete.class,
        Query.class,
        SpringProxy.class,
        Advised.class,
        DecoratingProxy.class
    }),
    aotProxies = {
        // model
        // ...
        
        @AotProxyHint(targetClass = GeneralModel.class)
    }
)
@SpringBootApplication(proxyBeanMethods = false)
public class GraalVmCompatibilityApplication {
    public static void main(String[] args) throws InterruptedException {
        try {
            SpringApplication.run(GraalVmCompatibilityApplication.class, args);
        } catch (Throwable throwable) {
            System.out.println("something is error.");
            System.out.println(throwable.getMessage());
            System.out.println(Arrays.toString(throwable.getStackTrace()));
        }
        new CountDownLatch(1).await();
    }
}

注意事项

  • 声明 model 是使用 @Component 而非 @Repository
  • 依赖注入是使用 @Autowired 而非 @Resource
  • 所有自定的 Autoconfiguration 需要手动执行init()
  • 所有 modelentity 需要反射, 即通过 @TypeHint 声明
  • @Column 中有使用到的 自定义class, 都需要反射, 即通过 @TypeHint 声明
  • 所有 model 不能实现其他的自定义接口
  • lambda风格字段不可使用
  • 所有 model 需要 container.getBean(ModelShadowProvider.class).loadModels() , 目前做了动态加载, 建议model定义为entity的内部类
class SomeEntity {
    @Component
    public static class Model implements Model<SomeEntity, K> {}
    
    private String name;
    //...
}

应该还有其他的不兼容的地方, 以后补充