谁在服务器中配置的 JNDI 数据源上执行连接? [复制]
Posted
技术标签:
【中文标题】谁在服务器中配置的 JNDI 数据源上执行连接? [复制]【英文标题】:Who performs the connection on a JNDI DataSource configured in the server? [duplicate] 【发布时间】:2018-08-22 10:39:33 【问题描述】:我正在将 WAR 部署到 Tomcat 中,该 Tomcat 在其 context.xml 中定义了数据源 (Oracle)。
我的应用程序通过 jndi 名称访问它。 我需要将 jar 驱动程序嵌入到战争中吗?还是我只需要将它放在 Tomcat 的类路径中?
--编辑--
我解释的有点不对。我在战争中提供它并且它正在工作。 但我认为我的最后一个疑问是连接是由服务器本身建立的,还是 jndi 只是将数据提供给应用程序以执行它。 战争中提供的驱动程序让我对这种行为感到困惑
谢谢
【问题讨论】:
是什么阻止您测试这两个选项? (我猜想把它放在 Tomcat 类路径中就足够了) 我解释的有点不对。我在战争中提供它并且它正在工作。但是我认为我的最后一个疑问是连接是由服务器本身建立的,还是 jndi 只是将数据提供给应用程序以执行它。战争中提供的驱动程序让我对这种行为感到困惑 【参考方案1】:在这种情况下,您不应该将驱动程序添加到您的 WAR 文件中,而是将其部署到 tomcat 的 lib
目录中。原因:服务器打开并维护连接,所以服务器本身需要访问驱动程序,而不仅仅是应用程序。
如果您还将驱动程序添加到应用程序,则可能会导致两个版本都被转移,并且最终可能会在类路径上出现重复的类,这绝不是有趣的调试。在绝对需要它的位置(服务器)包含一次,然后将其从您的 WAR 文件中删除。
【讨论】:
【参考方案2】:应用服务器并未与所有 RDBMS 系统的驱动程序 jar 文件捆绑在一起。 Tomcat 当然不附带 Oracle 的 JDBC 驱动程序文件。但是仍然需要这些类来创建连接等。
所以是的,您需要包含您的驱动程序 jar。您可能需要将它安装在服务器本身上(在<tomcat>/lib
下)
【讨论】:
【参考方案3】:将 JDBC 驱动程序放在 /lib 中将使其可用于所有应用程序。但是,如果您希望它专门用于 webapp,那么您可以考虑将库放在 /webapps/testapp/WEB-INF/lib 下。这样,您就可以控制要使用的版本。
【讨论】:
以上是关于谁在服务器中配置的 JNDI 数据源上执行连接? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pivotal TC 服务器中配置 Oracle 数据源 JNDI?
在tomcat下context.xml中配置各种数据库连接池(JNDI)
tomcat服务器连接MySQL数据库的JNDI数据源配置以及获得连接的Java代码