首页 > 其他分享 >spring aot分析

spring aot分析

时间:2023-10-29 17:23:08浏览次数:42  
标签:分析 -- spring image xxx aot properties native

native-image

graalvm支持使用native-image工具来生成二进制可执行文件。

对于运行时反射需要使用agent在运行时收集元信息,即META-INF/native-image/xxx/*.json文件。

通过agent收集元数据的文章:https://www.graalvm.org/reference-manual/native-image/guides/configure-with-tracing-agent/

export JAVA_TOOP_OPTIONS="-agentlib:native-image-agent=config-output-dir=/path/to/META-INF/native-image/xxx"

也可以实现org.graalvm.nativeimage.hosted.Feature接口,并设置META-INF/native-image/xxx/native-image.properties中的参数。

native-image.properties文件的文章:https://www.graalvm.org/22.1/reference-manual/native-image/BuildConfiguration/

Spring aot的实现:

native-image.properties格式:

Args = xxx      // native-image参数
JavaArgs = xxx  // jvm参数
ImageName = xxx // 镜像名称, 如果用户没指定则使用此的镜像名称

spring中ContextAotProcessor类生成native-image.properties的方法:

image-20231029155800405

image-20231029153421043

image-20231029153707040

常见的native-image参数:

参数 解释
--features a comma-separated list of fully qualified Feature implementation classes
--initialize-at-build-time a comma-separated list of packages and classes (and implicitly all of their superclasses) that are initialized during image generation. An empty string designates all packages
--initialize-at-run-time a comma-separated list of packages and classes (and implicitly all of their subclasses) that must be initialized at runtime and not during image building. An empty string is currently not supported
--install-exit-handlers provide java.lang.Terminator exit handlers
--no-fallback build stand-alone image or report failure
-H:Class Class containing the default entry point method. Optional if --shared is used

native-image会自动读取环境变量$NATIVE_IMAGE_CONFIG_FILE的properties文件中的NativeImageArgs作为native-image参数。

例如:这个export就设置默认读取的配置文件在$HOME/.native-image/default.properties下。

export NATIVE_IMAGE_CONFIG_FILE=$HOME/.native-image/default.properties

文件格式:

NativeImageArgs = --configurations-path /home/user/custom-image-configs \
                  -O1

native-image可以通过native-image --expert-options-all命令来查看所有所有隐藏配置。

spring aot实现

spring aot有三种方式来设置反射元数据。

  • @ImportRuntimeHints:通过注解导入一个RuntimeHintsRegistrar接口的实现类。

    image-20231029164038870

  • RuntimeHintsRegistrar接口:实现RuntimeHintsRegistrar接口并导入容器。

  • Reflective注解:默认通过SimpleReflectiveProcessor类进行处理,支持注解在类、构造器、属性、方法上。

    image-20231029164327777

这三种方式都是会把类型信息写入DefaultGenerationContextRuntimeHints中。

然后RuntimeHints里的所有反射信息会通过FileNativeConfigurationWriter类分别写入文件系统中的META-INF/native-image/groupId/artifactId/xxx.json文件,json文件的格式写入方式是通过BasicJsonWriter类来实现的。

通过把ApplicationClass写入到META-INF/native-image/groupId/artifactId/native-image.properties文件

格式如下:

Args = -H:Class=xxx,yyy \
--report-unsupported-elements-at-runtime \
--no-fallback \
--install-exit-handlers

image-20231029164917329

image-20231029164648186

标签:分析,--,spring,image,xxx,aot,properties,native
From: https://www.cnblogs.com/Lht1/p/17796055.html

相关文章

  • Spring Boot环境下自定义shiro过滤器会过滤所有的url的问题
    问题起因:在Shiro配置类中定义如下:@BeanpublicShiroFilterFactoryBeanshiroFilterFactoryBean(ShiroAuthFiltershiroAuthFilter,SecurityManagersecurityManager){ShiroFilterFactoryBeanfactoryBean=newShiroFilterFactoryBean();Map<String,......
  • 【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )
    文章目录一、虚继承原理1、虚继承解决继承二义性问题2、二义性产生的原因分析3、虚继承原理二、代码示例-虚继承原理1、完整代码示例2、执行结果一、虚继承原理1、虚继承解决继承二义性问题继承的二义性:如果一个子类(派生类)继承多个父类(基类),这些父类都继......
  • 转岗项目经理后,我是如何分析需求的
    项目经理有一项工作就是需求分析,需求的本质是根据认知进行假设,然后给出判断。如果需求分析的结果出了问题,那么产品也必然会失败。本文针对如何进行需求分析展开分析,希望能对你有所启发。一、什么是需求为什么要明确需求的定义,因为需求很容易被误解。在这里我们要区分下用户需求和产......
  • 转岗项目经理后,我是如何做竞品分析的
    竞品分析无论作为产品经理、运营岗位还是UE交互体验设计师,都是其必备技能和工作范畴之一。但是如何通过竞品分析提炼出有效信息,为业务或是设计决策提供有力的数据支撑,仍然值得我们进行更多的思考。在本文中 我整理了竞品分析的全过程,希望能帮到你。一、明确概念竞品分析是指对:现有......
  • 信息系统项目管理(高项)考试大纲分析
    大纲以及分值想要高效的学习,首先要先分析考试大纲。下面是信息系统项目管理(高项)新大纲No科目分值考点分布1新一代信息技术4分商业智能,物联网,大数据,互联网+,区块链,云计算,人工智能2信息化与信息系统5分信息技术发展,两化融合,信息系统阶段,大型信息系统,系统规划BSP,信息系统规划工具,信息......
  • 软件设计师考试大纲分析
    大纲以及分值想要高效的学习,首先要先分析考试大纲。下面是系统架构师新大纲上午题软件设计师分值计算机组成原理6分操作系统基础6分数据库基础6分网络与信息安全基础5分软件工程30分知识产权2分计算机英语5分项目管理2分程序设计语言基础知识5分数据结构与算法10分下午题更新计划后......
  • 系统架构师考试大纲分析
    大纲以及分值想要高效的学习,首先要先分析考试大纲。下面是系统架构师新大纲上午题系统架构设计师分值计算机组成原理3分操作系统基础5分数据库基础4分网络与信息安全基础4分软件工程15分知识产权3分计算机英语5分项目管理4分运筹学2分企业信息化5分可靠性分析与设计3分嵌入式系统2......
  • 系统分析师考试大纲分析
    大纲以及分值想要高效的学习,首先要先分析考试大纲。下面是系统分析师新大纲上午题系统分析师分值计算机组成原理6分操作系统基础5分数据库基础6分网络与信息安全基础5分软件工程15分知识产权3分计算机英语5分项目管理2分运筹学3分企业信息化5分可靠性分析与设计3分嵌入式系统3分系......
  • 系统架构案例分析( 数据库类型填空题)
    21年某医药销售企业因业务发展,需要建立线上药品销售系统,为用户提供便捷的互联网药品销售服务、该系统除了常规药品展示、订单、用户交流与反馈功能外,还需要提供当前热销产品排名、评价分类管理等功能。通过对需求的分析,在数据管理上初步决定采用关系数据库(MySQL)和数据库缓存(R......
  • 系统架构案例分析( java项目架构填空题)
    20年connectionpool数据库连接池viewlayer视图层Controllerlayer控制层businesslayer业务层19年18年17年16年SiteMesh是一个网页布局和装饰框架以及Web应用程序集成框架jQuery是一个快速、小巧且功能丰富的JavaScript库Struts2是一个基于MVC设计模式的Web应用程序......