如何复用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
相关产品推荐
相关产品推荐

