如何在处理多个数据源时优化设置数据源字段?

@Bean(name = ["dataSource"])
    fun dataSource(): DataSource {
        val dataSource = DriverManagerDataSource()
        dataSource.setDriverClassName(driverClassName)
        dataSource.url = url
        dataSource.username = username
        dataSource.password = password
        return dataSource
    }

减少上面所示的模板代码

推荐答案

It is possible via application.yaml file and little DSL configuration.
application.yaml:

spring:
  datasource:
    first:
      driver-class-name: com.mysql.cj.jdbc.Driver
      password: #{DB_FIRST_PASSWORD}#
      username: #{DB_FIRST_USERNAME}#
      url: jdbc:mysql://#{DB_FIRST_HOST}#:#{DB_FIRST_PORT}#/#{DB_FIRST_NAME}#
      hikari:
        maximum-pool-size: 5
        minimum-idle: 5
    second:
      driver-class-name: org.postgresql.Driver
      password: #{DB_SECOND_PASSWORD}#
      username: #{DB_SECOND_USERNAME}#
      url: jdbc:postgresql://#{DB_SECOND_HOST}#:#{DB_SECOND_PORT}#/#{DB_SECOND_NAME}#
      hikari:
        maximum-pool-size: 3
        minimum-idle: 3

100

@Configuration
class DataSourceConfiguration {

    @get:Bean
    @get:ConfigurationProperties("spring.datasource.first")
    val firstDataSourceProperties = DataSourceProperties()

    @get:Bean
    @get:ConfigurationProperties("spring.datasource.second")
    val secondDataSourceProperties = DataSourceProperties()

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.second.hikari") // GETS HIKARI CONFIGURATION
    fun firstDataSource(): DataSource =
        primaryDataSourceProperties
            .initializeDataSourceBuilder()
            .build()

    @Bean
    @ConfigurationProperties("spring.datasource.second.hikari") // GETS HIKARI CONFIGURATION
    fun secondDataSource(): DataSource =
        deliveryDataSourceProperties
            .initializeDataSourceBuilder()
            .build()

此外,您还可以使用100批注指定数据源Hikari配置

Kotlin相关问答推荐

在没有外部 map 的情况下转换列表项

在Kotlin中,有没有一种函数方法将一个列表(N个元素)映射到一个相邻元素之和列表(N—1个元素)?

Kotlin-stdlib中的模拟扩展函数

Microronaut Data 4和JDbi

如何修改muableStateMapOf的值?

为什么Kotlin有次构造函数和init块?

找不到有效的 Docker 环境

在 Kotlin 协程中切换 IO 和 UI 的正确方法是什么?

如何限制 Kotlin 中的枚举?

判断 AAR 元数据值时发现的一个或多个问题:

为什么 Kotlin 需要函数引用语法?

Kotlin 协程中的 Dispatchers.Main 和 Dispatchers.Default 有什么区别?

Kotlin 中的 Java Scanner 相当于什么?

找不到 androidsdk.modules

如何设置两列recyclerview?

launch 仅从 Kotlin 1.3 开始可用,不能在 Kotlin 1.2 中使用

如何捕获传递给模拟函数的参数并返回它?

Jetpack Compose-居中文本

Kotlin reflect proguard SmallSortedMap

项目不会使用 Kotlin 1.1.3 构建