【发布时间】: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