SpringBoot 3.3.4 应用程序、Hikari、MySQL 和 gradlew 原生编译

问题描述 投票:0回答:1

我有一个简单的 SpringBoot 3.3.4 应用程序 - Java v17、Gradle v8.10,我正在尝试一项基本任务,使用 Hikari 打开连接池,针对 MySQL 数据库运行几个 SQL 选择。我可以使用以下方式进行编译:

./gradlew nativeCompile

在配备 M3“arm64 芯片”的 Apple Mac 上运行

我已经在我的网站上上传了Java代码-SpringBoot项目:

https://jesusbianco.com/stackoverflow/Test1-Native-Data-MySQL.zip

代码编译 - 原生代码没有问题:

https://jesusbianco.com/stackoverflow/compile.txt

运行时的错误可从以下链接获取:

https://jesusbianco.com/stackoverflow/errors.txt

代码无法正常运行,启动时崩溃,某些类无法加载/找到,我猜是因为Java的反射?

如果在文件末尾修改了 build.gradle 文件,则启用这些行:

jar {
    archiveClassifier=''
    enabled = false
    duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
}

然后使用 Gradle 构建并运行应用程序:

gradle clean build

java -jar build/libs/test1-native-data-mysql-3.0.jar

使用 JVM 运行良好。

当前的问题是在不使用 JVM 的情况下运行本机映像“二进制代码”。我有另一个项目,更简单,我可以运行本机代码,但是这个使用 Hikari 和 MySQL JDBC 驱动程序的项目已损坏:-(

java gradle hikaricp graalvm graalvm-native-image
1个回答
0
投票

Graal 依赖于 https://github.com/oracle/graalvm-reachability-metadata 提供的可达性元数据来支持反射。在这种情况下,元数据似乎不完整。具体来说,

config.addDataSourceProperty("cachePrepStmts", "true");
调用会触发失败的代码路径。

如果您注释掉这些行,您的应用程序就会通过。

我已经打开 https://github.com/oracle/graalvm-reachability-metadata/issues/549 看看 Oracle 团队是否可以修复元数据。该问题还有一个您可以同时使用的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.