要配置自己的数据源,请在配置中定义该类型的@Bean。Spring Boot将在任何需要的地方重用数据源,包括数据库初始化.
Spring Boot提供了一个实用工具构建器类DataSourceBuilder,可用于创建一个标准数据源(如果它位于类路径中)。 构建器可以根据类路径中可用的内容检测要使用的内容。它还可以根据JDBC url自动检测驱动程序。
DataSourceBuilder提供了对数据库连接的支持,源码如下:
private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
"org.apache.tomcat.jdbc.pool.DataSource", //tomcat自带数据源,也是默认采用的连接池
"com.zaxxer.hikari.HikariDataSource", //现在性能比较高的数据源,SpringBoot2.0已经采用为默认的连接池
"org.apache.commons.dbcp.BasicDataSource", // deprecated 过时
"org.apache.commons.dbcp2.BasicDataSource" //DBCP连接池 };
如下展示了默认采用的数据源
第一种配置
#引入jdbc相关配置
app.datasource.url = jdbc:mysql://localhost:3306/springboot?useUnicode=true
app.datasource.username = root
app.datasource.password = 123456
app.datasource.driverClassName = com.mysql.jdbc.Driver
package com.niugang.config;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 自定义数据源配置
*
* @author niugang
*
*/
@Configuration
public class CustomDateSource {
/**
* @return
*/
@Bean
@ConfigurationProperties(prefix = "app.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
第二种配置
指定使用哪种类型的连接池
#主要的不同可能就是不同连接池,连接属性不一致
# 驱动配置信息
#app.datasource.jdbcUrl和底下的配置都可
app.datasource.jdbc-url = jdbc:mysql://localhost:3306/springboot?useUnicode=true
app.datasource.username = root
app.datasource.password = 123456
app.datasource.driverClassName = com.mysql.jdbc.Driver
package com.niugang.config;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariDataSource;
/**
* 自定义数据源配置
*
* @author niugang
*
*/
@Configuration
public class CustomDateSource {
/**
* @return
*/
@Bean
@ConfigurationProperties(prefix = "app.datasource")
public HikariDataSource dataSource() {
return (HikariDataSource)DataSourceBuilder.create().type(HikariDataSource.class).build();
}
}
第三种配置
您甚至可以进一步利用DataSourceProperties为您提供的功能默认的嵌入式数据库,如果没有提供url,则为其提供合理的用户名和密码。您可以很容易地从任何DataSourceProperties的状态初始化DataSourceBuilder也可以自动注入一个Spring Boot创建的。但是,这将把配置分为两个名称空间:spring.datasource上的url、用户名、密码、类型和驱动程序以及您的自定义名称空间(app.datasource)上的其余部分。为了避免这种情况,您可以在自定义名称空间上重新定义一个自定义DataSourceProperties(即采用统一化的命名空间).
以上意思就是配置url,用户名,类型,驱动按照spring.datasource之前提供的去配置,即就是按照DataSourceProperties中拥有的属性名配置.
数据源特有的,按照数据源配置。
app.datasource.url = jdbc:mysql://localhost:3306/springboot?useUnicode=true
app.datasource.username = root
app.datasource.password = 123456
app.datasource.driverClassName = com.mysql.jdbc.Driver
app.datasource.maxPoolSize=10
//因为DataSourceProperties负责为您处理url将转化为jdbcUrl等等,如果有其他属性,DataSourceProperties您可以进行配置
package com.niugang.config;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.zaxxer.hikari.HikariDataSource;
/**
* 自定义数据源配置
*
* @author niugang
*
*/
@Configuration
public class CustomDateSource {
@Bean
@Primary
@ConfigurationProperties("app.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("app.datasource")
public HikariDataSource dataSource(DataSourceProperties properties) {
//DataSourceProperties负责为您处理url转化为jdbcUrl
return (HikariDataSource) properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
}
如果需要配置多个数据源,必须将其中一个DataSource设置为 @Primary标记为以后的各种自动配置,以便能够按类型获得一个。
app.datasource.foo.type=com.zaxxer.hikari.HikariDataSource #数据源类型
app.datasource.foo.maximum-pool-size=30
app.datasource.bar.url=jdbc:mysql://localhost/test
app.datasource.bar.username=dbuser
app.datasource.bar.password=dbpass
app.datasource.bar.max-total=30
@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSourceProperties fooDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSource fooDataSource() {
return fooDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("app.datasource.bar")
public DataSourceProperties barDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("app.datasource.bar")
public DataSource barDataSource() {
return barDataSourceProperties().initializeDataSourceBuilder().build();
}
微信公众号:
JAVA程序猿成长之路
分享学习资源,学习方法,记录程序员生活。