有啥方法可以收集在 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&lt;DataSource&gt; 类型的字段添加到您想要的 bean 中。另外我建议你看一下 API,因为有更多的方法,然后只有 getBean("&lt;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 的集合?的主要内容,如果未能解决你的问题,请参考以下文章

spring中的核心类都有哪些,各有啥作用!

spring框架有啥用?

java有啥常用开源的框架?

Docker:有啥方法可以列出正在运行的 docker 容器中打开的套接字?

springmvc和其他mvc框架有啥区别?

spring中的依赖注入有啥用?