我从本指南开始: https ://guides.micronaut.io/micronaut-function-graalvm-aws-lambda-gateway/guide/index.html 它可以工作并创建可在本地 SAM 实例中部署的 API。
在我的真实项目中,我需要访问 JPA、数据库,因此我在 build.gradle 中添加了引用:
compile group: 'com.oracle.ojdbc', name: 'ojdbc8', version: '19.3.0.0'
implementation("io.micronaut.configuration:micronaut-jdbc-hikari")
implementation( "io.micronaut.data:micronaut-data-hibernate-jpa:1.0.0.M5")
annotationProcessor("io.micronaut.data:micronaut-data-processor:1.0.0.M5")
还添加 CRUD 所需的 TypeHint 和 ojdbc 所需的反射信息; https://github.com/oracle/graal/issues/1748#issuecomment-542353582 https://micronaut-projects.github.io/micronaut-data/latest/guide/#graalJPA
在 graal 构建的写入阶段,我收到以下错误:
error: Classes that should be initialized at run time got initialized during image building:
org.jboss.logging.Logger was unintentionally initialized at build time ...
org.hibernate.internal.CoreMessageLogger_$logger was unintentionally initialized at build time...
等等,Hibernate 尝试实例化的多个记录器。
这是一个示例,在我连接到数据库并实现 CRUD 的真实项目中发生了相同的错误。在示例中,为了重现,我没有添加这些。