Tomcat jdbc 池显示 ClassNotFoundException,但工作正常

Tomcat jdbc pool shows ClassNotFoundException but works

提问人:Alireza Fattahi 提问时间:10/28/2023 最后编辑:Alireza Fattahi 更新时间:10/28/2023 访问量:48

问:

要在 Tomcat 9 中为 Microsoft SQLServer 配置 JDBC 池,我在下面添加了server.xml

<Resource auth="Container" 
   type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
   factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" 
   maxActive="100" maxIdle="30"  maxWait="10000" name="jdbc/SABA" 
   defaultAutoCommit="true" 
   username="user" password="pass" url="jdbc:sqlserver://myserver:1433;DatabaseName=mydb;" />

在 tomcat 启动期间,我得到了很多ClassNotFoundException

Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

这显然是正常的,因为我没有将 SQL Server 驱动程序复制到 Tomcat 库中,但是在应用程序启动后,池正在工作,我可以从中获取连接。我的应用程序中有 SQL Server 驱动程序。WEB-INF\lib

这是默认行为吗?如果这是正常的,我可以在 Tomcat 启动期间抑制异常吗?

java tomcat jdbc 类装入器 jdbc-pool

评论

0赞 f1sh 10/28/2023
如果从配置中删除 driverClassName,会发生什么情况?听起来这可能是一个不正确的 FQCN,但正确的 FQCN 正在加载并正确注册
0赞 Alireza Fattahi 10/28/2023
我得到java.sql.SQLException: No suitable driver found for jdbc:sqlserver://...
0赞 Samuel Marchant 10/28/2023
那里加载了另一个驱动程序或另一个驱动程序配置。它可能位于您的 PATH 上,也可能位于另一个 jdbc 的操作系统启动配置中。无论哪种方式,该配置都找不到与其命名的相对对象。
0赞 Mark Rotteveel 10/28/2023
您确定您确实在 Web 应用程序中使用吗?我很快就会猜到您的应用程序正在与您的应用程序创建连接或在您的应用程序中创建数据源,而不是 Tomcat 提供的数据源。jdbc/SABADriverManager
0赞 Alireza Fattahi 10/28/2023
亲爱的要测试@MarkRotteveel是当我更改为其他东西时,我也会挖掘代码,发现连接是从池中获取的name="jdbc/BadNameName [SABA] is not bound in this Context. Unable to find [SABA].

答: 暂无答案