有啥方法可以收集在 Spring 应用程序/容器中配置为 bean 的所有 javax.sql.DataSource 的集合?
Posted
技术标签:
【中文标题】有啥方法可以收集在 Spring 应用程序/容器中配置为 bean 的所有 javax.sql.DataSource 的集合?【英文标题】:Is there any way to get a collection of all the javax.sql.DataSource that are configured as beans within a Spring Application/Container?有什么方法可以收集在 Spring 应用程序/容器中配置为 bean 的所有 javax.sql.DataSource 的集合? 【发布时间】:2016-10-22 10:01:15 【问题描述】:假设可以按如下方式构造数据源 bean:
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="$jdbc.driverClassName"/>
<property name="url" value="$jdbc.url"/>
<property name="username" value="$jdbc.username"/>
<property name="password" value="$jdbc.password"/>
</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="$jdbc.driverClassName"/>
<property name="url" value="$jdbc.url2"/>
<property name="username" value="$jdbc.username"/>
<property name="password" value="$jdbc.password"/>
</bean>
<bean id="dataSource3" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="$jdbc.driverClassName"/>
<property name="url" value="$jdbc.url3"/>
<property name="username" value="$jdbc.username"/>
<property name="password" value="$jdbc.password"/>
</bean>
有没有一种方法可以获取所有这些数据源的集合,而不必通过它们的标识符显式引用 bean?例如获取Bean(“数据源3”)。容器或应用程序上下文是否在这里提供任何帮助?
本质上给定一个已经定义了所有bean的配置文件,在spring中是否有可能实现?
Collection<DataSource> getAllRegisteredDataSources();
非常感谢
【问题讨论】:
只需将List<DataSource>
类型的字段添加到您想要的 bean 中。另外我建议你看一下 API,因为有更多的方法,然后只有 getBean("<name-of-bean")
;
【参考方案1】:
是的,您可以采用两种方法来解决此问题。
第一种方法,基本方法,是创建一个主配置并自动连接附加配置,通过自动连接的上下文,您可以构建数据源的集合
@Configuration
@Import( DataSourceAConfig.class ) // Import additional configuration files as required
public class MasterConfig
@Autowired DataSourceAConfig dataSourceAConfigContext;
@Bean public List<DataSource> getAllDataSources()
DataSource dataSourceA = dataSourceAConfigContext.getDataSourceBean()
// Add data in sequentially way, one after the other
return Arrays.asList(dataSourceA);
第二种方法;我推荐的方法是查看 Spring Boot 应用程序附带的执行器服务,尤其是那些围绕指标的服务。
http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html
它们提供了超出活动数据源数量的附加信息;包括资源利用和健康检查。
希望对您有所帮助。
【讨论】:
太棒了,我真的在寻找什么!谢谢!以上是关于有啥方法可以收集在 Spring 应用程序/容器中配置为 bean 的所有 javax.sql.DataSource 的集合?的主要内容,如果未能解决你的问题,请参考以下文章