You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat运行项目报错:找不到com.microsoft.jdbc.sqlserver.SQLServerDriver类

问题排查请求

项目此前运行正常,近期Tomcat服务器启动时出现错误:Configuration error. Class [com.microsoft.jdbc.sqlserver.SQLServerDriver] not found。已尝试清理Maven仓库、重新搭建工作空间等方案,问题仍未解决,请求帮忙排查故障。

pom.xml配置

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.2</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.7.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>jakarta.persistence</artifactId>
        </exclusion>
    </exclusions>
    <!-- <version>2.6.4</version> -->
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.1.1</version>
</dependency>

堆栈跟踪信息

[EL Info]: 2022-10-19 10:48:17.06--ServerSession(1180572281)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.7.3.v20180807-4be1041
[EL Severe]: ejb: 2022-10-19 10:48:17.077--ServerSession(1180572281)--Thread(Thread[main,5,main])--Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.7.3.v20180807-4be1041): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.microsoft.jdbc.sqlserver.SQLServerDriver] not found.
Oct 19, 2022 10:48:17 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class [com.abb.se.ppc.core.boot.SpringContextListener]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ClientContext' defined in URL [file:C:/CapDes_Stage/Code/HE_STAGE/CapDes_G_Config_DB/frame_work_config/frame_work/ui/cap_des_ui.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.abb.se.ppc.client.ClientContext]: Constructor threw exception; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.7.3.v20180807-4be1041): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.microsoft.jdbc.sqlserver.SQLServerDriver] not found.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    ....................
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4768)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)

排查方向及解决方案

1. 修正JDBC驱动类名

sqljdbc4 4.2版本的正确驱动类名是com.microsoft.sqlserver.jdbc.SQLServerDriver,你当前配置里的com.microsoft.jdbc.sqlserver.SQLServerDriver是早期驱动的旧写法。检查项目中所有数据库配置文件(比如persistence.xml、Spring配置文件、db.properties等),把驱动类名替换成正确的。

2. 确认依赖打包情况

  • 执行mvn dependency:tree,检查sqljdbc4依赖是否存在,有没有被其他依赖排除。
  • 确认pom.xml里的<packaging>是war,且sqljdbc4依赖的<scope>是默认的compile(如果设为provided,Tomcat不会把该依赖打包进WAR)。
  • 解压生成的WAR包,查看WEB-INF/lib里是否有sqljdbc4-4.2.jar,没有的话重新执行mvn clean package。

3. 排查Tomcat类加载冲突

如果Tomcat安装目录的lib文件夹里有旧版本的SQLServer驱动,会和项目依赖的驱动冲突,直接删掉Tomcat/lib里的相关驱动文件。

4. 修复本地Maven依赖

删除本地Maven仓库中com/microsoft/sqlserver/sqljdbc4/4.2目录,重新执行mvn clean install拉取完整的依赖包,避免依赖损坏。

5. 检查JDK兼容性

sqljdbc4 4.2支持JDK6+,但如果用的是JDK9+,可能存在模块访问问题。可以在Tomcat启动参数里加--add-modules java.sql,或者把驱动换成新版的mssql-jdbc(替代旧的sqljdbc4)。

内容的提问来源于stack exchange,提问作者Abikrish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:30:56