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
相关产品推荐
相关产品推荐

