SpringBoot数据源配置

依赖

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.6.13</version>
<scope>compile</scope>
</dependency>

spring-boot-starter-jdbc 中 引入了

1
2
3
4
5
6
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
<scope>compile</scope>
</dependency>

入口

1
2
3
4
5
6
7
8
9
10
11
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration {

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",
matchIfMissing = true)
static class Hikari {

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

}

@SuppressWarnings("unchecked")
protected static <T> T createDataSource(DataSourceProperties properties, Class<? extends DataSource> type) {
return (T) properties.initializeDataSourceBuilder().type(type).build();
}

自定义

1
2
3
4
5
6
7
spring:
datasource:
one:
driver-class-name: com.mysql.cj.jdbc.Driver
password: YdpQwIoy8E0dFWH7
url: jdbc:mysql://10.10.10.206:3306/coredb?useOldAliasMetadataBehavior=true
username: coreuser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
public class DataSourceConfig {

@Bean(name = "oneDataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSourceProperties oneDataSourceProperties() {
return new DataSourceProperties();
}

@Bean(name = "dsOne")
DataSource dsOne(@Qualifier("oneDataSourceProperties") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}

@Bean(name = "jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dsOne) {
return new JdbcTemplate(dsOne);
}
}

数据源参考

  • spring-boot-autoconfigure
  • spring-boot-starter-jdbc
  • sharding-jdbc-spring-boot-starter
  • dynamic-datasource-spring-boot-starter