【发布时间】:2014-06-02 21:30:19
【问题描述】:
我有一个 Tomcat servlet 容器,其中包含由 Tomcat 的连接池管理的 DataSources 列表。从我的 Spring 应用程序(Spring 3.2.3)中,我想在运行时获取这些数据源之一,例如:
public class MyService {
@Autowired
private JndiObjectLocator jndiLocator;
public void myMethod(String jndiName) {
DataSource myDataSource = jndiLocator.locate(jndiName);
}
}
关于如何做到这一点的任何想法?
【问题讨论】:
-
为什么需要运行时查找,为什么在配置中不能这样做?
-
问题出在哪里?
-
@M.Deinum 因为我将拥有大约 20 个数据源(最初的糟糕设计),我不想
@Autowire20 个资源并做 20 个切换案例。数据源的数量也会增加(可能每年一次) -
@Stefoan 问题是:如何在 Spring 中做到这一点?
-
为什么不能在 spring 配置中定义所有这些并使用对
BeanFactory(或ApplicationContext)的引用来进行查找?不需要 switch/if-then-else 结构。此外,如果这 20 个数据源与多租户支持有关,您可能希望拥有一个 look at this,这将使其对您的应用程序完全透明。