首页 > 解决方案 > 将 Spring 数据源绑定到 JNDI

问题描述

我有一个基于 Spring Boot 的 Spring 应用程序,该应用程序部署到外部 tomcat实例中。

该应用程序创建的数据源很少。这些数据源被添加到 entitymanager 并相应地设置事务管理器。

然而,最近我们以编程方式集成了一个与 JNDI 数据源一起工作的 ETL 工具。这里的要求是在启动时将当前的 spring 数据源绑定到 JNDI 树中。

我试图在创建数据源 bean 后创建一个初始上下文并将数据源绑定在那里,但是,我确实看到抛出了 NoInitialContext 异常。

如何将这些 spring 数据源绑定到外部 tomcat 的 JNDI 树中?感谢帮助!

注意:我不能/不允许编辑 tomcat 配置,因为它是从 PaaS 模板初始化的。因此需要研究能够从应用程序内部绑定到 JNDI 树的方法。

标签: spring-boottomcatdatasourcebindjndi

解决方案


AFAIK 这是不可能的。看一下 JEE 规范:

容器必须确保应用程序组件实例对其命名上下文只有读取权限。容器必须从修改环境命名上下文及其子上下文的 javax.naming.Context 接口的所有方法中抛出 javax.naming.OperationNotSupportedException。 Jakarta EE 规范 - 资源、命名和注入

如果您想玩,请参阅此 SO 帖子有一些有趣的代码示例。

恕我直言,您可以通过创建 JNDI 资源并将它们传递给 EntityManger/Spring 来实现您想要的。但这意味着配置将完全存在于 Spring 之外。所以这可能不会做你想做的事。


推荐阅读