java - 在spring中以编程方式获取JNDI资源

标签 java spring tomcat jndi

我有一个 Tomcat servlet 容器,其中包含由 Tomcat 连接池管理的 DataSource 列表。从我的 Spring 应用程序(Spring 3.2.3)我想在运行时获取这些数据源之一,例如:

public class MyService {
    @Autowired 
    private JndiObjectLocator jndiLocator;

    public void myMethod(String jndiName) {
        DataSource myDataSource = jndiLocator.locate(jndiName);
    }
}

关于如何做到这一点有什么想法吗?

最佳答案

您始终可以在代码中执行 JNDI 查找,为此您可以使用 JndiDataSourceLookup 并调用 getDataSource() 方法。

public class MyService {
    @Autowired 
    private JndiDataSourceLookup lookup;

    public void myMethod(String jndiName) {
        DataSource myDataSource = lookup.getDataSourcejndiName);
    }
}

另一种选择是让您的 bean 知道 BeanFactory 并从那里检索 DataSource

public class MyService {
    @Autowired 
    private BeanFactory factory;

    public void myMethod(String jndiName) {
        DataSource myDataSource = factory.getBean(jndiName, DataSource.class);
    }
}

关于java - 在spring中以编程方式获取JNDI资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003612/

相关文章:

java - 尝试在本地运行 PubSub 模拟器时出错

java - 正确打印到文件,但随后挂起

java - 在 Spring Boot 中通过 POST 创建对实体创建的父引用

java - 即使不从 spring 上下文调用 getBean ,也会注入(inject)新的 bean

java - WAR 文件中的镜像

java - 低暂停收集器 - 并发模式失败

java - 通知未显示在锁定屏幕上

java - 来自 Controller 和其他类的 Spring Boot 静态资源

java - Java 如何使用 XMX 和 XMS 内存?

wordpress - 使用 openam 或 sso 的应用程序中的用户成员资格