java - 如何支持连接池供应商特定的 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
...等)属性作为自动配置属性的一部分有什么意义?
解决方案
HikariDataSource
extends HikariConfig
,它具有您想要设置的所有附加属性。
Spring 会将带有前缀spring.datasource.hikari
的任何属性DataSource
直接绑定到对象中,而不是绑定到DataSourceProperties
对象中。
它是通过ConfigurationPropertiesBindingPostProcessor
在后期使用来完成的。
推荐阅读
- python - 无法对python循环中的变量值求和。修复它的方法是什么?
- c++ - 指针返回值地址
- shell - 如果 shell 脚本中的命令失败,不确定如何发送错误代码
- google-sheets - 将特定列转换为 Google 表格中的行
- javascript - 如何使用 ifelse 语句通过 JavaScript DropDown 掩码访问 LimeSurvey 用户输入?
- java - AWS JVM CPU 限制上的 Docker
- javascript - google-map-react 使用多个标记使地图居中
- nmap - nmap 找不到 nse_main.lua
- webpack - 使用 Babel 为 IE11 转译 ES6
- python - 使用 Python 和 Sympy 以可预测的顺序生成唯一的排列