java - 如何使用 JNDI 将 Java 应用程序连接到数据库?

标签 java jdbc jndi

我正在实现 JNDI 概念以连接到数据库。我在谷歌上搜索了起点,但没有找到。

我想做的是有一个简单的 java 独立应用程序,它使用 JNDI 概念来连接到数据库。

我的样本来源是:

DataSource dataSource = null;

Context context = null;





    try {       

        context = new InitialContext();

        dataSource = (DataSource) context.lookup("database_connection");
        }

    catch (NamingException e) {

            System.out.println("Got naming exception, details are -> " + e.getMessage());

        }

现在,我们在哪里定义database_connection?它是在 xml 文件中定义的吗?如果是,我们在哪里指定它以及它的格式是什么?

如果能提供任何指示,那就太好了。

谢谢

最佳答案

您的问题与示例之间的真正区别在于您使用的是独立的 Java 应用程序。几乎每个示例都假定您在 Java EE 应用程序容器中运行。在这种情况下,您定义与容器的数据库连接,使用 JNDI 获取数据源,并从中获取连接。

当您执行 JNDI 查找以获取数据源时,JNDI 框架会查找初始上下文工厂(实现 InitialContextFactory 的类)。在您的 Java EE 应用程序中,容器提供了这一点。在您的独立 Java 应用程序中,初始上下文为空,并且没有进一步的查找正确解析。

解决此问题的方法之一是创建您自己的初始上下文工厂:

public class MyContextFactory implements InitialContextFactory

并在启动时将其注入(inject) JNDI:

System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "mypackag.MyContextFactory");

然后从 getInitialContext 调用返回一个新的 ObjectFactory,然后实现 ObjectFactory 以从 getConnection() 调用返回一个 DataSource(也可能是自定义的)。

这一切都可行,但太过分了。只使用普通的 JDBC 连接字符串方法直接在您的应用程序中获取连接比尝试使用 DataSource 更容易。或者使用像 Spring 这样的框架为您注入(inject)它,或者将数据库连接信息与代码分开(在这种情况下,您使用的是 Spring 配置文件而不是直接使用 JNDI)。

我提倡创建自定义上下文工厂和数据源方法的一个原因是,如果您有想要在 Java EE 应用程序和独立应用程序中运行的通用 JPA 代码(否则配置起来并不简单)相同的代码来完成这两项操作)。这听起来不像你的情况。

因此,由于您是独立的并且不在 Java EE 容器中,我认为您的真正答案是您的用例不适合 DataSource(除非您转移到像 Spring 这样提供数据源的框架)。

关于java - 如何使用 JNDI 将 Java 应用程序连接到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456377/

相关文章:

java - Java 中的自实例化

java - 如何在JavaFX中更新节点状态?

java - 如何在 firebase 中检查查询过程是否完成

java - Vertx JDBC 的底层工作原理

javascript - Node.js 和 jdbc : TypeError: Cannot read property 'url' of undefined

mysql - Jetty 9 JNDI 设置 - 未找到类 : org. eclipse.jetty.plus.jndi.Resource

java - 将 JSON 从 URL 转换为 JSONNode

java - DB2 JDBC 创建 clob 错误

java - 改进 LDAP 的 Java 代码

java - Jetty 9 邮件 session 资源 JNDI 查找时出现 NameNotfoundException