【问题标题】:Any reason for JNDI in a Spring Boot app?在 Spring Boot 应用程序中使用 JNDI 的任何原因?
【发布时间】:2016-01-14 18:26:57
【问题描述】:

背景

我们正在将传统的 java 应用程序从部署到 tomcat 容器的 war 转换为在嵌入式 tomcat 服务器中运行的 Spring Boot 应用程序。我们目前正在将 JNDI 用于在 tomcat 实例的 conf/ 文件夹中的 context.xml 中定义的数据库连接。

问题

没有办法用 Spring Boot 应用程序来做到这一点,不完全是这样。我找到了在 Spring Boot 应用程序中使用 JNDI 定义数据源的解决方案,但它需要代码中的所有连接信息。这让我想到,如果连接信息在代码中,是否还有使用 JNDI 的意义?我认为 JNDI 的意义在于分离如何连接的细节,以便它可以根据环境定义。

另类

定义一个没有 JNDI 的数据源,并在外部定义连接细节(例如,命令行参数、Spring Cloud Config Server 或其他东西)。

【问题讨论】:

  • Spring Boot 支持开箱即用的非 jndi 数据源,只需向 application.properties 添加一些属性即可。当使用嵌入式容器时,JNDI(恕我直言)真的没有用。仅当您部署到容器时,才可能重用现有数据源。

标签: java spring jakarta-ee spring-boot jndi


【解决方案1】:

请记住,JNDI 最初被设想为一种抽象出数据源的特定连接细节的方法(嗯,不仅仅是数据源,但你明白了要点)。这个抽象一般来说是有意义的,所以 JNDI 是一个官方认可的标准,必须在所有想要与 JEE(J2EE?不记得)兼容的东西中实现。

您仍然需要配置抽象,因为您不想在代码中硬编码所有不同环境的所有值,但 Spring 有现成的解决方案。就我个人而言,我不会在 JEE 服务器中永远不会出现的任何事情上为 JNDI 烦恼。

【讨论】:

  • 对,我并不是说不应该抽象连接细节,只是当我第一次意识到在 Spring Boot 中使用 JNDI 的建议是将它们编码时,这就是导致我想知道为什么我们应该使用 JNDI。谢谢!
猜你喜欢
  • 2016-06-12
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多