不使用 web.xml 时如何将 JDBC 数据源绑定到 JNDI 上下文“java:comp/env/jdbc”

Posted

技术标签:

【中文标题】不使用 web.xml 时如何将 JDBC 数据源绑定到 JNDI 上下文“java:comp/env/jdbc”【英文标题】:How to bind a JDBC datasource to JNDI context "java:comp/env/jdbc" when not to use web.xml 【发布时间】:2015-05-31 06:52:38 【问题描述】:

如何仅使用基于代码的方法将 JDBC 数据源绑定到 JNDI 上下文 java:comp/env/jdbc

我们需要在web.xml 中写入resource-ref 以将数据源绑定到JNDI 本地上下文java:comp/env/jdbc。 但我只想使用org.springframework.web.context.AbstractContextLoaderInitializer 而不是web.xml(旧方法)。

我们知道方法InitialContext#createSubcontext。但是一些应用服务器(例如Websphere)不接受编辑上下文java:comp/env/jdbc/

有什么解决办法吗?

版本:

春季 4.0.7 Servlet 3.0

【问题讨论】:

您已经发现有些容器不支持它。因此,这个问题没有答案。 @sndyuk 如果对您有用,请接受下面的答案 【参考方案1】:

您可以使用 Spring 的 SimpleNamingContextBuilder 尝试完整的编程方法:

  SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
  DataSource ds = new DriverManagerDataSource(...);
  builder.bind("java:comp/env/jdbc/myds", ds); // you control the datasource
  builder.activate();

它主要用于测试目的。如果您选择使用它,那么您需要提供自己的连接池(例如 Apache 的 Jakarta Commons DBCP)。

我曾经在部署到 cloudbees 时用于测试。 see this blogpost

这适用于“普通”Tomcat。我没有要测试的 EE 服务器,但您可以尝试一下,看看会发生什么(我猜 JNDI 绑定名称对于服务器来说必须是唯一的)。

【讨论】:

【参考方案2】:

你的应用服务器是什么?

看看这是否有帮助。

How to use JNDI DataSource provided by Tomcat in Spring?

【讨论】:

我知道如何在 Spring 中使用数据源。我想知道如何将数据源绑定到java:comp/env/jdbc/..

以上是关于不使用 web.xml 时如何将 JDBC 数据源绑定到 JNDI 上下文“java:comp/env/jdbc”的主要内容,如果未能解决你的问题,请参考以下文章

context.xml 的解释

如何使用JFinal开发javaweb

使用jdbc操作时,如何提取数据的性能

尝试使用 jdbc、SimpleDateFormat 插入数据库时​​,日期中的年份不正确

使用servlet+jdbc+MD5实现用户加密登录

Android:如何在不使用 JDBC、PHP 或任何其他网络服务的情况下将数据发送到 MySQL DB? [复制]