31.Spring-Boot1.5x官方文档自定义配置数据源
作者:互联网
要配置自己的数据源,请在配置中定义该类型的@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连接池 };
如下展示了默认采用的数据源
第
单数据源配置
第一种配置
- application.properties
#引入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
- CustomDateSource.java
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(); } }
第二种配置
指定使用哪种类型的连接池
- application.properties
#主要的不同可能就是不同连接池,连接属性不一致 # 驱动配置信息 #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
- CustomDateSource.java
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中拥有的属性名配置.
数据源特有的,按照数据源配置。
- application.properties
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
- CustomDateSource .java
//因为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标记为以后的各种自动配置,以便能够按类型获得一个。
- application.properties
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
- CustomDateSource.java
@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程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。
标签:org,自定义,DataSourceProperties,数据源,app,datasource,Spring,import 来源: https://www.cnblogs.com/niugang0920/p/12192937.html