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

         

     微信公众号

     

     

  • 相关阅读:
    在Spring Boot中使用数据库事务
    Data Consistency Primer
    在Spring Boot中输出REST资源
    Android开发——进程间通信之Messenger
    初识在Spring Boot中使用JPA
    设计模式——享元模式详解
    回首2016,展望2017
    [转]OpenStack Keystone V3
    [原]Openstack之identity server(keystone)
    [原]secureCRT 改变显示宽度
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12192937.html
Copyright © 2020-2023  润新知