You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用Kotlin类实现基于配置属性的两个数据库连接

多数据库连接优雅实现方案

不用复制类,借助Spring Boot的@ConfigurationProperties和@Qualifier就能实现多实例配置与连接,具体步骤如下:

1. 调整基础类

修改Config类

去掉@Configuration和@Scope("singleton")注解,让它成为仅用于属性绑定的通用类,不再固定前缀:

@ConfigurationProperties(prefix = "")
open class Config {
    lateinit var schema: String
    lateinit var account: String
}

修改Connection类

去掉@Configuration注解,将其改为普通依赖类,避免Spring自动注册为单例:

open class Connection(private val config: Config) {
    fun makeConn() {
        // 原有连接逻辑,使用config中的schema、account属性
    }
    fun fetch() {
        // 原有查询逻辑
    }
}

2. 注册多实例Bean

新建配置类,手动注册两个不同的Config和Connection实例,用@Qualifier标记区分:

@Configuration
class MultiDbConfig {

    // 第一个数据库的配置实例
    @Bean
    @ConfigurationProperties(prefix = "db1")
    @Qualifier("db1Config")
    fun db1Config(): Config {
        return Config()
    }

    @Bean
    @Qualifier("db1Connection")
    fun db1Connection(@Qualifier("db1Config") config: Config): Connection {
        return Connection(config)
    }

    // 第二个数据库的配置实例
    @Bean
    @ConfigurationProperties(prefix = "db2")
    @Qualifier("db2Config")
    fun db2Config(): Config {
        return Config()
    }

    @Bean
    @Qualifier("db2Connection")
    fun db2Connection(@Qualifier("db2Config") config: Config): Connection {
        return Connection(config)
    }
}

3. 更新配置文件

在application.properties中添加两个数据库的属性配置:

# 第一个数据库配置
db1.schema=ABC
db1.account=myAcc1

# 第二个数据库配置
db2.schema=XYZ
db2.account=myAcc2

4. 业务类中注入多实例

在dataFetch类中,通过@Qualifier指定要注入的具体实例:

open class DataFetch(
    @Qualifier("db1Config") private val db1Config: Config,
    @Qualifier("db1Connection") private val db1Connection: Connection,
    @Qualifier("db2Config") private val db2Config: Config,
    @Qualifier("db2Connection") private val db2Connection: Connection
) {
    fun fetchFromDb1() {
        // 使用第一个数据库的配置和连接
        println("DB1 Schema: ${db1Config.schema}")
        db1Connection.fetch()
    }

    fun fetchFromDb2() {
        // 使用第二个数据库的配置和连接
        println("DB2 Schema: ${db2Config.schema}")
        db2Connection.fetch()
    }
}

补充说明

这种方式可以轻松扩展更多数据库连接,只需新增对应前缀的配置项和Bean定义即可,完全避免代码冗余。如果后续需要新增第三个连接,只需要在配置文件加db3.*属性,在配置类里新增一组db3Config和db3Connection的Bean注册逻辑就行。

内容的提问来源于stack exchange,提问作者Mayank Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:35:14