【问题标题】:Instantiate Spring Bean实例化 Spring Bean
【发布时间】:2020-09-22 22:51:27
【问题描述】:

我正在尝试根据我的要求调用两个不同的 bean。这两个 bean 实现了相同的接口。我必须使用两个基于数据中心的不同 db。我如何通过从应用程序传递参数在 springboot 应用程序中做到这一点.properties

interface Data
{
   string getData(String query)
}



   @Component("oracle")
   class Oracle implements Data
   {
       //getMethod Code Here.
   }


   @Component("sqlserver")
   class SqlServer implements Data
   {
       //getMethod Code Here.
   }

目前我正在使用

  String db = appContext.getBean(propertiesfile.db//getting the value from properties file, Data::class.java)

并根据返回值调用特定的数据库。但是无论如何我只能基于 app.properties 实例化一个 bean 意味着不在每个请求中使用 appContext.getBean

【问题讨论】:

  • Spring Boot 已经通过 spring.datasource 属性为您提供了此功能。您只需将 DataSource dataSource 放入服务的构造函数中(或者更好的是,一个 R2DBC 连接)。
  • 抱歉误导了这个问题,这只是我使用两个数据 bean 创建的一个示例,我的现实生活场景中我只需要实例化一个实现
  • 两个选项 - 1) 使用 @ConditionalOnProperty 并为每个部署提供单独的属性文件。 2) 使用 Spring 的 Profile 并映射到 Maven/Gradle 的构建配置文件以生成单独的 jar,以便 jar 文件在属性文件上包含 spring.profiles.active 以与构建配置文件匹配。然后使用@Profile 选择性地初始化 Beans
  • 我尝试使用@@ConditionalOnProperty(prefix = "db", name = ["service"]),但仍然无法自动装配。自动装配时有多个“数据”类型的 bean

标签: java spring spring-boot spring-webflux


【解决方案1】:

根据建议,我最终使用了@ConditionalOnProperty

这个链接帮助我解决了这个问题。

https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-autoconfiguration/src/main/java/com/baeldung/conditionalonproperty

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 2017-04-23
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2018-08-09
    相关资源
    最近更新 更多