Java EE Web应用如何通过JDBC连接使用Windows身份验证的本地MS SQL Server
问题根因
你遇到的ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDataSource是Web应用运行时类路径下不存在mssql-jdbc驱动包导致,同时使用Windows身份认证连接SQL Server还有额外配置需要处理,按以下步骤操作即可解决:
1. 修复驱动类找不到问题
你虽然配置了Maven依赖,但需确认依赖被正确部署到Tomcat的类加载路径下:
- 检查pom.xml中mssql-jdbc依赖的scope配置,不要添加
<scope>provided</scope>,默认的compile scope会自动将依赖打包到Web应用的WEB-INF/lib目录下 - 打开IDEA的
File > Project Structure > Artifacts,找到当前Web应用对应的war/exploded包,查看右侧可用元素列表中的mssql-jdbc包,右键选择「Put into WEB-INF/lib」,保存配置后重启Tomcat - 也可以直接将mssql-jdbc-9.4.0.jre11.jar放到Tomcat安装目录的
lib文件夹下,所有部署到该Tomcat实例的应用都可共享该驱动
2. 配置Windows身份认证依赖库
使用integratedSecurity=true参数时,需要额外配置对应位数的sqljdbc_auth.dll动态链接库:
- 下载对应版本的微软SQL Server JDBC驱动压缩包,解压后找到和你系统位数(32位/64位)匹配的
sqljdbc_auth.dll文件 - 将该dll文件放到以下任意一个路径中:
- JDK安装目录的
bin文件夹 - Tomcat安装目录的
bin文件夹 - Windows系统的
C:\Windows\System32目录
- JDK安装目录的
3. 修正代码错误
你当前代码中静态字段上的@Resource注解无效,静态字段不支持资源注入,且你后续已手动实例化SQLServerDataSource,可直接删除该注解。另外不建议使用静态的Connection对象,会存在线程安全问题,连接用完后要及时关闭,参考修正代码:
public static boolean Connect(String dbName){ String conStrUrl = "jdbc:sqlserver://DESKTOP-UF0PE6E\\SQLEXPRESS:57411;integratedSecurity=true;databaseName=" + dbName; try (Connection con = DriverManager.getConnection(conStrUrl)) { return true; } catch (SQLException e) { e.printStackTrace(); return false; } }
4. 确认SQL Server配置
- 打开SQL Server配置管理器,进入「SQL Server网络配置 > 对应实例的协议」,确认TCP/IP协议已启用,且监听端口和你代码中配置的57411一致
- 确认SQL Server已开启Windows身份认证模式,且允许远程连接
内容的提问来源于stack exchange,提问作者Kač
相关产品推荐
相关产品推荐

