当前位置: 首页 > 知识库问答 >
问题:

当我用Tomcat 9和Java10停止SpringBoot web应用程序时非法反射访问

雍志文
2023-03-14

我正在尝试使用Spring Boot 2Java10开发,我遇到了一些问题。

应用程序是一个基于Spring Boot 2的简单Web应用程序。应用程序启动正常,但是当我停止它时,我收到以下警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.catalina.loader.WebappClassLoaderBase (file:/C:/Users/CS/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.11/tomcat-embed-core-9.0.11.jar) to field java.io.ObjectStreamClass$Caches.localDescs
WARNING: Please consider reporting this to the maintainers of org.apache.catalina.loader.WebappClassLoaderBase
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

如您所见,我已经将嵌入式Tomcat服务器从版本8切换到9.0.11,以符合Java模块系统。并且应用程序通过选项<代码>-添加-打开java.base/java.lang=ALL-UNNAMED启动

有人知道为什么我会收到这条信息吗?

共有1个答案

张茂勋
2023-03-14

要关闭这些警告,您需要在启动脚本中使用以下选项:

--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

正如您在Tomcat 9启动脚本中看到的那样。

警告的修复不太可能很快得到解决:

是否有计划在将来的版本中解决这些问题?

现在不行。

我们将尽可能长时间保持明确的清理。一旦它被永久阻止,我们可能不得不依赖于这样一个事实,即所讨论的映射使用WeakReference,并等待GC清除引用。这将使追踪真正的内存泄漏变得更加困难,因此我们必须看看,如果达到这一点,我们是否能够说服JRE团队提供某种替代API。

 类似资料:
  • 问题内容: 我正在以正确的方式处理连接。 1. 我在应用程序中使用“hibernate”连接池。每当我从池中获得连接时,完成事务后,我就会返回池中。 2. 我已监视数据库以检查连接。我将“空闲连接”时间设置为60秒。我发现没有连接对象运行超过60秒。 我仍然经常收到此错误。而且我的Web应用程序正在停止。我每天必须重新启动tomcat。但是,我正在寻找一种永久的解决方案,而无需重新启动tomcat

  • JDK11+spring批处理 有人知道那些警告是什么意思吗: 警告:发生了非法的反射访问操作警告:org.springframework.cglib.core.reflectutils$1(jar:file:/users/boru/downloads/spcljr/build/libs/spcljr-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0

  • 我运行我的Android应用程序(基于Java),它可以工作。接下来,我添加到我的应用程序代码: FirebaseFirestore fdb=FirebaseFirestore。getInstance(); 这是我从Android官方网站上得到的代码https://firebase.google.com/docs/firestore/quickstart 应用程序运行,但接下来运行的设备显示消息“

  • 如果应用程序未运行,GCMinentService(扩展GCMBasEventService)不会收到通知。 来自:http://developer.android.com/about/versions/android-3.1.html 已停止应用程序上的启动控制请注意,系统会将标志\u排除\u已停止\u包添加到所有广播意图中。它这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的

  • 我正在使用反射来调用java.util.Stream.Stream上的方法,但由于实际实现(ReferencePipeline等)具有运行的实际代码,因此在调用时会收到非法的反射访问警告,如果没有该调用,它将无法工作。我想知道是否有一种方法可以自动将其委托给一个访问不非法的超级方法?也就是说,我想调用,其中是合法的,而不是或任何实现。 编辑这里是一些代码。是通过反射获得的流的具体实例。

  • 我的项目使用不间断的SQL/MX作为RDBMS数据库,这是HP的产品。我无法使用SpringBoot在应用程序中定义JDBCURL、用户和密码的标准实践连接到数据源。属性文件。 这是错误: