繁体   English   中英

当我在外部 tomcat 中重新部署战争文件时,本机库 mssql-jdbc_auth-8.4.1.x64.dll 已经加载到另一个类加载器中

[英]Native library mssql-jdbc_auth-8.4.1.x64.dll already loaded in another classloader when I redeploy the war file in external tomcat

我有一个使用 ms-sql 数据库的 spring 启动应用程序,它在服务器新启动时正确部署在外部 tomcat 中,但是当我重新部署相同的 war 文件时,我收到以下错误(war 文件仍然部署但无法正常运行:

当我在外部 tomcat 中重新部署 war 文件时,本机库 mssql-jdbc_auth-8.4.1.x64.dll 已经加载到另一个类加载器中。

所以我取消部署war文件,重新启动tomcat服务器,然后重新部署它,它可以正确部署并工作(功能和CRUD)。

我正在使用 tomcat 9.0.43 并且没有其他应用程序部署到服务器实例。

编辑:我在 windows 上运行 tomcat 并且在 Z1B359D8741068B55BEFA 文件夹中还有 .dll 文件。 另外我正在使用 maven 进行依赖管理。

该程序使用 DB auth 的集成安全性

您的问题来自您想要对 WAR 文件进行的双重使用:

  • 一方面,每当您使用java -jar运行 WAR 文件时,您都需要 JDBC 驱动程序,
  • 另一方面,只要 WAR 文件部署在 servlet 容器中,您不希望 web 应用程序的类加载器中的 JDBC 驱动程序。 servlet 容器应提供驱动程序。

幸运的是spring-boot-maven-plugin已经在repackage目标中提供了这样一个功能:所有标记为已provided的依赖项(例如 Embedded Tomcat 库)都放在WEB-INF/lib-provided文件夹中,因此不会加载由 servlet 容器。

因此,您只需将 JDBC 驱动程序标记为已provided并将其添加到 Tomcat 的公共加载程序的类路径( $CATALINA_BASE/lib )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM