Solon v2.7.5

项目开发定制

</> markdown

关于第三方框架的情况:

  • A:完全不支持(比如内部有动态编译或字节码类)
  • B:支持,但是需要自己实验后加很多配置
    • "mysql-connector-java:5.x" 属于这种情况
  • C:支持,只需要自己再补点配置
    • "mysql-connector-java:8.x" 属于这种情况
  • D:完全支持(一般自己带了 native-image 元信息配置的)

1、项目定制

项目定制,一般是处理 "B" 和 "C" 两种情况,以及自己项目中一些特殊的使用。基本原则就是:

  • 所有反射,需要申明登记
  • 所有资源,需要申明登记

这里讲的项目定制,全是基于 solon.aot 提供的 "RuntimeNativeRegistrar" 接口完成上面两件事情。

public interface RuntimeNativeRegistrar {
    void register(AppContext context, RuntimeNativeMetadata metadata);
}

2、定制示例 demo4013-wood_native

这个示例,只需要增加 "mysql-connector-java:8.x" 的资源登记:

@Component
public class RuntimeNativeRegistrarImpl implements RuntimeNativeRegistrar {
    @Override
    public void register(AppContext context, RuntimeNativeMetadata metadata) {
        metadata.registerResourceInclude("com.mysql.jdbc.LocalizedErrorMessages.properties");
      
    }
}

3、定制示例 nginxWebUI

这个示例就复杂一些,是已有项目改造过来,大约花费了大半天:

@Component
public class RuntimeNativeRegistrarImpl implements RuntimeNativeRegistrar {
    @Override
    public void register(AppContext context, RuntimeNativeMetadata metadata) {
        metadata.registerResourceInclude("acme.zip");
        metadata.registerResourceInclude("banner.txt");
        metadata.registerResourceInclude("mime.types");
        metadata.registerResourceInclude("nginx.conf");

        metadata.registerResourceInclude("messages_en_US.properties");
        metadata.registerResourceInclude("messages.properties");

        metadata.registerSerialization(JSONConverter.class);
        metadata.registerSerialization(AsycPack.class);
        metadata.registerSerialization(JsonResult.class);
        metadata.registerSerialization(Server.class.getPackage());

        metadata.registerReflection(ProviderFactory.class,  MemberCategory.INVOKE_DECLARED_METHODS);
        metadata.registerReflection(BufferedImage.class,  MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
                MemberCategory.INVOKE_DECLARED_METHODS);
        metadata.registerReflection(JSONConverter.class, MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
                MemberCategory.INVOKE_DECLARED_METHODS);

    }
}