在 Spring 启动应用程序中使用 JNDI 的任何原因?
Any reason for JNDI in a Spring Boot app?
背景
我们正在将传统的 java 应用程序从部署到 tomcat 容器的 war 转换为在嵌入式 tomcat 中运行的 Spring 引导应用程序] 服务器。我们目前正在使用 JNDI 进行数据库连接,这些连接在 tomcat 实例的 conf/
文件夹中的 context.xml
中定义。
问题
Spring 引导应用程序无法做到这一点,不完全是这样。我找到了在 Spring 引导应用程序中使用 JNDI 定义数据源的解决方案,但它需要代码中的所有连接信息。这让我开始思考,如果连接信息在代码中,使用 JNDI 有什么意义吗? 我认为 JNDI 的意义在于分离如何连接的细节,所以它可以根据环境定义。
备选
定义一个没有 JNDI 的数据源,并在外部定义连接细节(例如,命令行参数、Spring Cloud Config Server 或其他)。
请记住,JNDI 最初被认为是一种抽象出数据源的特定连接细节的方法(好吧,不仅仅是数据源,但你明白了要点)。这种抽象在一般情况下是有意义的,因此 JNDI 是一个官方认可的标准,必须在所有想要与 JEE(J2EE?不记得)兼容的东西中实现。
您仍然需要配置抽象,因为您不想在代码中对所有不同环境的所有值进行硬编码,但是 Spring 有 ready-made 解决方案。就个人而言,我不会在 JEE 服务器中永远不会出现的任何情况下使用 JNDI。
背景
我们正在将传统的 java 应用程序从部署到 tomcat 容器的 war 转换为在嵌入式 tomcat 中运行的 Spring 引导应用程序] 服务器。我们目前正在使用 JNDI 进行数据库连接,这些连接在 tomcat 实例的 conf/
文件夹中的 context.xml
中定义。
问题
Spring 引导应用程序无法做到这一点,不完全是这样。我找到了在 Spring 引导应用程序中使用 JNDI 定义数据源的解决方案,但它需要代码中的所有连接信息。这让我开始思考,如果连接信息在代码中,使用 JNDI 有什么意义吗? 我认为 JNDI 的意义在于分离如何连接的细节,所以它可以根据环境定义。
备选
定义一个没有 JNDI 的数据源,并在外部定义连接细节(例如,命令行参数、Spring Cloud Config Server 或其他)。
请记住,JNDI 最初被认为是一种抽象出数据源的特定连接细节的方法(好吧,不仅仅是数据源,但你明白了要点)。这种抽象在一般情况下是有意义的,因此 JNDI 是一个官方认可的标准,必须在所有想要与 JEE(J2EE?不记得)兼容的东西中实现。
您仍然需要配置抽象,因为您不想在代码中对所有不同环境的所有值进行硬编码,但是 Spring 有 ready-made 解决方案。就个人而言,我不会在 JEE 服务器中永远不会出现的任何情况下使用 JNDI。