spring-boot - 将 Spring 数据源绑定到 JNDI
问题描述
我有一个基于 Spring Boot 的 Spring 应用程序,该应用程序部署到外部 tomcat实例中。
该应用程序创建的数据源很少。这些数据源被添加到 entitymanager 并相应地设置事务管理器。
然而,最近我们以编程方式集成了一个与 JNDI 数据源一起工作的 ETL 工具。这里的要求是在启动时将当前的 spring 数据源绑定到 JNDI 树中。
我试图在创建数据源 bean 后创建一个初始上下文并将数据源绑定在那里,但是,我确实看到抛出了 NoInitialContext 异常。
如何将这些 spring 数据源绑定到外部 tomcat 的 JNDI 树中?感谢帮助!
注意:我不能/不允许编辑 tomcat 配置,因为它是从 PaaS 模板初始化的。因此需要研究能够从应用程序内部绑定到 JNDI 树的方法。
解决方案
AFAIK 这是不可能的。看一下 JEE 规范:
容器必须确保应用程序组件实例对其命名上下文只有读取权限。容器必须从修改环境命名上下文及其子上下文的 javax.naming.Context 接口的所有方法中抛出 javax.naming.OperationNotSupportedException。 Jakarta EE 规范 - 资源、命名和注入
如果您想玩,请参阅此 SO 帖子有一些有趣的代码示例。
恕我直言,您可以通过创建 JNDI 资源并将它们传递给 EntityManger/Spring 来实现您想要的。但这意味着配置将完全存在于 Spring 之外。所以这可能不会做你想做的事。
推荐阅读
- android - Android:当启动带有相机照片意图的相机应用程序时,用户需要制作两次照片
- python - Python 端口扫描器,用户输入
- xml - 如何使用perl读取xml中特定标签的值
- socket.io - 通过 apache 代理运行 socket.io 的问题
- c# - 通过 CSOM 将 Sharepoint 中的文件夹共享给外部和内部用户
- c++ - 修复错误:引用变量的声明需要初始化器
- android - Android Google auth 奇怪的问题
- timer - 在 swiftUI 中重复 24 小时计数器
- c# - 使用 FFMPEG 流式传输 YouTube 音频的示例
- react-native - 具有相同滚动方向的嵌套 FlatList 不滚动