将 Spring 数据源绑定到 JNDI
Posted
技术标签:
【中文标题】将 Spring 数据源绑定到 JNDI【英文标题】:Bind Spring datasource to JNDI 【发布时间】:2020-07-19 04:05:57 【问题描述】:我有一个基于 Spring Boot 的 Spring 应用程序,该应用程序部署到 外部 tomcat 实例中。
应用程序创建的数据源很少。这些数据源被添加到 entitymanager 并相应地设置事务管理器。
不过,最近我们以编程方式集成了一个与 JNDI 数据源一起使用的 ETL 工具。这里的要求是在启动时将当前的spring数据源绑定到JNDI树中。
我尝试在创建数据源 bean 后创建初始上下文并将数据源绑定到那里,但是,我确实看到抛出了 NoInitialContext 异常。
如何将这些 spring 数据源绑定到外部 tomcat 的 JNDI 树中?感谢您的帮助!
注意:我不能/不允许编辑 tomcat 配置,因为它是从 PaaS 模板初始化的。因此需要研究能够从应用程序内部绑定到 JNDI 树的方法。
【问题讨论】:
【参考方案1】:AFAIK 这是不可能的。看看 JEE 规范:
容器必须确保应用程序组件实例对其命名上下文只有读取权限。容器必须从修改环境命名上下文及其子上下文的 javax.naming.Context 接口的所有方法中抛出 javax.naming.OperationNotSupportedException。 Jakarta EE Spec - Resources, Naming, and Injection
如果你想玩玩,请参阅this SO post 有一些有趣的代码示例。
恕我直言,您可以通过创建 JNDI 资源并将它们传递给 EntityManger/Spring 来实现您想要的。但这意味着配置将完全存在于 Spring 之外。所以这可能不会做你想做的事。
【讨论】:
以上是关于将 Spring 数据源绑定到 JNDI的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat 8,axis2 webservices aar,spring jndi未绑定在上下文中