[英]Dynamic association with multiple datasource JNDI entries with Spring
我有一个现有的简单Spring应用程序,带有DAO类,该类扩展了NamedParameterJdbcDaoSupport
。
在Spring上下文文件中,我有一个“ p:dataSource-ref”属性,它引用一个“ jee:jndi-lookup”元素,该元素引用了在容器中定义的JNDI名称。
像这样:
<jee:jndi-lookup jndi-name="${jndiPrefix}/specificdb" id="mydb"/>
<bean class="com...dao.OrdersDAO" p:name="ordersDAO" p:dataSource-ref="mydb"/>
这一切都很好。 我已经成功地将此部署到了WebLogic和TomEE。
现在,我需要考虑一个新的应用程序,该应用程序与其数据源之间的关系稍微有些动态。 新应用程序的整体数据流将与现有应用程序非常相似。
新的应用程序将具有N个数据源,所有数据源都具有相同的数据模型。 容器将具有所有数据源的JNDI名称的定义,我想我将不得不拥有一个附加的JNDI名称,该名称仅包含一个逗号分隔的字符串,该字符串包含数据源的所有JNDI名称。
在春季做这样的事情有哪些有效的策略?
更新 :
我在原始帖子中没有明确说明的一件事是,我将使用哪种算法来“选择”要使用的数据源。
关键是,我没有选择单个数据源,而是使用了所有数据源。 该应用程序要求查询要在所有数据源上运行,并且结果集是所有数据源的并集。
第一个答案描述了一种策略,该策略实际上将“外观”数据源连接到一组其他数据源中的一个。 这是一个有趣的问题,但不是我在这里寻找的问题。
无论如何,我相信我知道如何做到这一点,但是我还没有实现它。 我的意图是动态创建一组数据源,并将它们与DAO关联(不确定我是否要使用具有一组数据源的单个DAO或DAO与数据源之间的1-1关系)。 包含服务将在启动时读取JNDI环境字符串,其中包含数据源的JNDI名称列表,并动态创建DataSource对象。 查询过程将简单地从每个数据源收集结果并将它们合并在一起。
TomEE具有与Spring相同的路由功能。
检查这些链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.