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();
}

 

     

 微信公众号

 

 

posted @ 2020-01-14 16:57  盲目的拾荒者  阅读(737)  评论(0编辑  收藏  举报