Ojdbc8 jars 升级到 21.1.0.0 抛出 Nosuchmethod 异常 UCPservletContextListener init
Posted
技术标签:
【中文标题】Ojdbc8 jars 升级到 21.1.0.0 抛出 Nosuchmethod 异常 UCPservletContextListener init【英文标题】:Ojdbc8 jars upgrade to 21.1.0.0 throws Nosuchmethod exception UCPservletContextListener init 【发布时间】:2021-09-02 11:18:19 【问题描述】:Ojdbc8、ons、ucp jars升级到21.1.0.0版本。当尝试在 tomcat 服务器上启动应用程序时,它会抛出 Nosuchmethod 异常。登录 Tomcat 的 localhost.log 文件。应用程序在启动过程中尝试建立数据库连接。
01-Jun-2021 15:59:56.641 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 在类路径上检测到 3 个 Spring WebApplication Initializers 2021 年 6 月 1 日 16:00:05.365 信息 localhost-startStop-1 org.apache.catalina.core.ApplicationContext.log 初始化 Spring 嵌入式 WebApplicationContext 2021 年 6 月 1 日 16:00:19.397 严重 localhost-startStop-1 org.apache.catalina.core.StandardContext.listenerStart 配置类 [oracle.ucp.jdbc.UCPServletContextListener] 的应用程序侦听器时出错 java.lang.NoSuchMethodException: oracle.ucp.jdbc.UCPServletContextListener.init 在 java.lang.class.getConstructor(Unknown Source)
【问题讨论】:
【参考方案1】:这是 21.1 中 ucp.jar 的一个已知问题。它将在 21.3 发布时修复。同时,您可以从 ucp.jar 中删除该类:
oracle/ucp/jdbc/UCPServletContextListener.class
【讨论】:
非常感谢您提供的信息。请问删除该课程是否会影响任何事情? 这是 21c 中引入的一项新功能,用于使用 Servlet 上下文侦听器自动启动 UCP。它适用于 JBoss,但不适用于 Tomcat。如果使用 Tomcat,您可以安全地删除它。不会有任何影响。 那太好了。再次感谢?【参考方案2】:根据我的经验,如果您将 jdbc/ucp jar 放入 Tomcat 的 lib(推荐用于生产系统)并在 Maven 中为它们设置 provided
范围,问题就会消失。
另一种选择是在 web.xml 中设置metadata-complete="true"
(阅读更多here 和here)
【讨论】:
【参考方案3】:如果你使用的是spring boot,那么你可以使用
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
这个依赖或者更新你的maven项目。
【讨论】:
我有一个使用 v21 驱动程序的 Spring Boot 项目,我没有问题中的错误。使用 Spring Boot 你甚至可以省略<version>
,它将从父 Spring Boot pom 获取以上是关于Ojdbc8 jars 升级到 21.1.0.0 抛出 Nosuchmethod 异常 UCPservletContextListener init的主要内容,如果未能解决你的问题,请参考以下文章
将 ojdbc8.jar 添加到 Eclipse/maven 项目的正确方法