我已将我们公司应用程序的Java版本从8更新到17。 在本地计算机上,它在构建和运行时调用方面都运行良好。 同样在 GitHub 上,它与 Junit 测试执行一起部署得很好。
问题是在我将应用程序部署到 Heroku 上之后出现的。 Heroku 构建成功,但在运行时,当我调用方法时,我收到此错误:
"message": "Handler dispatch failed; nested exception is java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type\n\tRemaining input: java/util/concurrent/CompletableFuture",
这与java反射方法和方法签名有关。 我的控制器剩余方法返回一个 CompletableFuture 对象。 CompletableFuture 不太好.........
此错误与此错误相关,正在调查中。
目前的解决方法是禁用 CompletableFuture 检测。 这可以通过将以下内容添加到 newrelic.yml 的公共节下来完成:
class_transformer:
com.newrelic.instrumentation.java.completable-future-jdk8u40:
enabled: false
2022-02-23 更新:New Relic 中的错误是由 Java 17 中的以下错误引起的:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8282241
2022 年 7 月 29 日更新:Java 19 早期版本已包含修复程序。应在 Java 17.0.5 中修复,将于 2022 年 10 月发布。
2022 年 10 月 19 日更新:Java 17.0.5 已发布,修复了导致此问题的错误。
2024 年 7 月 22 日更新:对于那些无法更新 Java 版本但使用 New Relic Java 代理版本 8.13.0 或更高版本的用户,必须禁用一个新的检测模块。配置文件中的新条目是:
class_transformer:
com.newrelic.instrumentation.java.completable-future-jdk11:
enabled: false