我应该为 Web 应用程序数据源使用啥 JNDI InitialContext 实现?

Posted

技术标签:

【中文标题】我应该为 Web 应用程序数据源使用啥 JNDI InitialContext 实现?【英文标题】:What JNDI InitialContext implementation should I be using for a web application datasource?我应该为 Web 应用程序数据源使用什么 JNDI InitialContext 实现? 【发布时间】:2012-05-01 00:44:23 【问题描述】:

我是第一次开始使用 JNDI。我正在使用部署在 tomcat 上的 Spring Mvc 开发 Web 应用程序,连接到 mysql 数据库。

据我了解,使用 JNDI 数据源的原因是希望在本地和实时服务器上运行应用程序时连接到不同的数据库,但不希望为此更改任何配置;我从 JNDI 检索数据源,这在不同的机器上为我提供了不同的数据源。

我的问题是我不确定应该为我的 java 对象使用什么 JNDI 上下文?我在网上找到的示例范围倾向于说“从 JNDI 中检索”,而没有说明 JNDI 上下文是什么。

具体来说,我应该使用 LDAP 吗?或者我应该使用tomcat?如果我使用的是 tomcat,那么与全局 JDNI 对象相比,本地 JDNI 对象的意义何在?即,本地的当然意味着当我希望 JNDI 对象不同时我必须更改配置设置,因此为什么我首先要费心在 JNDI 中配置我的数据源?直觉上,我认为全局 tomcat JNDI 上下文将是最好的选择,但我只是有点粗略。

【问题讨论】:

【参考方案1】:

根据我的经验,您使用相同的应用程序,并且没有将任何关于数据库信息的代码硬编码到代码中,并且在部署应用程序时仍希望连接到不同的数据库而不做任何更改。

例如,您移至 DEV -> QA->... -> Prod 可能都具有相同的 JNDI 名称,但是它们将在不同的环境中进行不同的配置。使用相同的战争/耳朵,无需任何更改。

在 tc 上配置的 JNDI 名称(可根据 ENV 更改)- 代码在不同环境中移动

JNDI 在配置方面为您提供松耦合。

【讨论】:

以上是关于我应该为 Web 应用程序数据源使用啥 JNDI InitialContext 实现?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Web 容器外部查找 JNDI 数据源?

Oracle JDBC 驱动程序未在旧版 Web 应用程序中使用 JNDI 连接到数据库

如何在使用 JNDI 的应用程序中查找数据源 [重复]

JNDI是什么?

连接池还是数据源?我应该把哪个放在JNDI中?

为啥使用 JBoss 进行 Grails 部署?