JDBC驱动程序是否应包含在WAR中?

HDa*_*ave 6 java servlets jdbc

我们正在开发一种商业软件产品.它支持Oracle,MySQL和SQL*Server后端(我们也使用H2进行测试).我们使用特定版本的JDBC驱动程序对这些不同的数据库进行集成测试.Maven处理这一切都非常漂亮.

将应用程序打包为WAR时,如果我们包含JDBC驱动程序是否可以?什么是标准做法?

由于我们不知道哪个数据库可以提前使用,因此我们必须将它们全部包含在内.目标servlet容器是Tomcat和Jetty,但是一些客户也希望在WebSphere和JBoss中运行.

那么servlet包含和应用程序服务器自带的JDBC驱动程序?我们会发生冲突吗 另一个问题是我们已经开发并测试了一个版本的驱动程序,如果客户使用其他版本,我们可能会遇到问题.

目前我们使用Spring数据源bean,但正在转向数据源的JNDI查找.

Pas*_*ent 8

那么servlet包含和应用程序服务器自带的JDBC驱动程序?

有些人(例如WebLogic).

我们会发生冲突吗

他们不应该.不确定在应用程序级别创建独立连接池时会选择您的(这完全取决于类加载器委派模式).

另一个问题是我们已经开发并测试了一个版本的驱动程序,如果客户使用其他版本,我们可能会遇到问题.

有一个支持的版本列表.

目前我们使用Spring数据源bean,但正在转向数据源的JNDI查找.

如果这意味着使用应用程序服务器提供的连接池,则必须在容器级别而不是在应用程序级别安装驱动程序.这以某种方式结束了讨论.

  • 扩展最后一句:JNDI数据源是容器管理的,*隐式要求*驱动程序存在于容器的库中.容器不会扫描WAR库以获取驱动程序.这确实结束了讨论:) (4认同)

Viv*_*sse 6

在大多数应用程序中,JDBC驱动程序不作为应用程序的一部分提供.

如果您运送JDBC驱动程序,则意味着您必须为要支持的所有数据库提供驱动程序.它添加了许多不必要的库.

只是不添加任何驱动程序,并告诉用户在需要时将相关的JAR文件放在服务器库中.