首页 > 解决方案 > 如何支持连接池供应商特定的 DataSourceProperties 配置

问题描述

org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariDataSource dataSource(DataSourceProperties properties) {
    HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);
    if (StringUtils.hasText(properties.getName())) {
        dataSource.setPoolName(properties.getName());
    }
    return dataSource;
}

参数类型DataSourceProperties缺少目标类型HikariDataSource(例如maximum-pool-size和许多其他)支持的许多属性(显然是设计使然)。因此,许多属性没有按照以下文件中的说明传递:spring-configuration-metadata.json

{
  "name": "spring.datasource.hikari.auto-commit",
  "type": "java.lang.Boolean",
  "sourceType": "com.zaxxer.hikari.HikariDataSource"
},
{
  "name": "spring.datasource.hikari.catalog",
  "type": "java.lang.String",
  "sourceType": "com.zaxxer.hikari.HikariDataSource"
}

那么我应该定义dataasource bean并将属性设置为HikariDataSource那么将上述(spring.datasource.hikari.auto-commit...等)属性作为自动配置属性的一部分有什么意义?

标签: javaspringspring-boot

解决方案


HikariDataSourceextends HikariConfig,它具有您想要设置的所有附加属性。

Spring 会将带有前缀spring.datasource.hikari的任何属性DataSource直接绑定到对象中,而不是绑定到DataSourceProperties对象中。

它是通过ConfigurationPropertiesBindingPostProcessor在后期使用来完成的。


推荐阅读