我通过 Eclipse 使用 Java、JSP、Tomcat 创建了一个 Web 应用程序。
在我的 Windows 开发环境上运行应用程序时,它工作正常。数据库连接正常(通过 Eclipse 在 Lib 中的 sqljdbc42.jar)测试数据库位于我的 Window 开发 PC 上 链接:http://localhost:8080/App/
为了测试生产上的数据库连接是否正常工作,我有一个 Java 文件(与我的项目无关,但使用相同的数据库驱动程序和 URL。它只是用于测试生产上的数据库连接),它正确连接到位于生产上的数据库。
但是,当我将 war 文件(从本地开发环境)上传到 Tomcat WebApps 文件夹后,我收到标题中的错误,生产中的数据库未成功连接。
我使用以下驱动程序和 url 进行数据库连接
drivers=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost;databaseName=ABC;integratedSecurity=true
在上面的url字符串中,我已经尝试了上面的localhost,还尝试了生产IP地址,服务器名称,localhost:1433
,localhost\\MSSQLSERVER
,都得到相同的错误
我在生产站点的 ClassPath
中有以下内容:
C:\sqljdbc42.jar;C:\microsoft-mssqlserver.jar;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jre1.8.0_201\bin;.
提前谢谢您。
最佳答案
您应该检查 tomcat 服务器的类加载器路径。关于docs ,您的服务器希望在以下位置找到 sqlserver 驱动程序 jar (sqljdbc42.jar
):
- JVM 的引导类 (
$JAVA_HOME/jre/lib/ext
)
Web 应用程序的 /WEB-INF/classes
Web 应用程序的 /WEB-INF/lib/*.jar
- 系统类加载器类(通过
CLASSPATH
环境变量描述) - 常用类加载器类(
$CATALINA_BASE/lib
和$CATALINA_HOME/lib
)
因此,您可以尝试的最佳选择是:
- 将 jar 复制到
$JAVA_HOME/jre/lib/ext
(#1) - 或配置您的构建,以便将 jar 复制到
/WEB-INF/lib/
(#3)
Number#2适用于java类;不适合您的情况。
Number#4和#5更有可能使用tomcat自己的结构,但如果你想把jar放进去,它仍然完全合法。
进一步编辑:由于某种原因,有 cases为了防止内存泄漏,Tomcat 可能会阻止 sqlserver 驱动程序。因此,如果您通过应用本文前面提到的解决方案来确定 jar 位于类路径上;您还可以尝试将以下内容添加到 server/.xml
中以禁用泄漏检查:
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false" />
关于java - 获取错误 java.sql.SQLException : No suitable driver found for jdbc:sqlserver://localhost;databaseName=ABC;integratedSecurity=true on Production,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54881115/