1. 数据源

数据源(DataSource)是由SUN公司定义的用于获取数据库连贯的JDBC标准接口
它位于javax.sql包中,用来代替DriverManager的形式来获取连贯
package javax.sql;import java.sql.Connection;import java.sql.SQLException;import java.sql.Wrapper;// 省略正文public interface DataSource  extends CommonDataSource, Wrapper {  Connection getConnection() throws SQLException;  Connection getConnection(String username, String password)    throws SQLException;}

应用数据源能够间接获取数据库的连贯对象,不须要再编写数据库的代码。

2. 数据库连接池

数据源能够创立多个数据库连贯,这些连贯会保留在数据库连接池中。
当须要建设数据库连贯时,只须要从连接池中取出一个闲暇的连贯,用完之后再放回去。

传统的JDBC拜访技术,每次拜访数据库都须要通过数据库驱动器Driver和数据库名称以及明码等等资源建设数据库连贯,会减少系统资源和CPU的开销,而连接池能够很好地解决这个问题。

另外,咱们能够通过连接池的管理机制监督数据库的连贯的数量、应用状况,为零碎开发、测试以及性能调整提供根据。

3. 集成Druid连接池

Druid连接池是目前最好的数据库连接池,在性能、性能、扩展性方面,远超于DBCP、C3P0等。

SpringBoot次要有两种形式集成Druid连接池。

(1) 应用Druid启动器

间接在pom.xml中引入druid-spring-boot-starter,而后在application.yaml中配置就行:

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid-spring-boot-starter</artifactId>    <version>1.1.22</version></dependency>
spring:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8    username: root    password: root

写一个简略的测试用例,打印数据源的配置:

@SpringBootTest@RunWith(SpringRunner.class)public class DruidStarterConfigTest {    @Resource    private DataSource dataSource;    @Test    public void test() throws SQLException {        DruidDataSource druidDataSource = (DruidDataSource) dataSource;        System.out.println(druidDataSource.getDriverClassName());        System.out.println(druidDataSource.getUrl());        System.out.println(druidDataSource.getUsername());        System.out.println(druidDataSource.getPassword());    }}

运行后果:

(2) 自定义Druid连接池

在pom.xml中引入数据源,而后在application.yaml中进行配置:

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid</artifactId>    <version>1.2.5</version></dependency>

没有druid启动器,就须要咱们本人手动注入一个Druid数据源,这里应用了@ConfigurationProperties注入application.yaml中配置的属性。

@Configurationpublic class DruidStarterConfig {    @Bean    @ConfigurationProperties("spring.datasource")    public DataSource druidDataSource() {        return new DruidDataSource();    }}

还是应用上边的测试用例看看后果:

@SpringBootTest@RunWith(SpringRunner.class)public class DruidStarterConfigTest {    @Resource    private DataSource dataSource;    @Test    public void test() throws SQLException {        DruidDataSource druidDataSource = (DruidDataSource) dataSource;        System.out.println(druidDataSource.getDriverClassName());        System.out.println(druidDataSource.getUrl());        System.out.println(druidDataSource.getUsername());        System.out.println(druidDataSource.getPassword());    }}

4. Druid连接池属性

除了上边配置的属性之外,Druid还提供了很多连接池属性,能够更好地对连接池进行治理和监控:
https://github.com/alibaba/dr...

spring:  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8    username: root    password: root    #druid连接池配置    druid:      #初始化时建设物理连贯的个数      initial-size: 5      #最小连接池数量      min-idle: 5      #最大连接池数量 maxIdle曾经不再应用      max-active: 20      #获取连贯时最大等待时间,单位毫秒      max-wait: 60000      #申请连贯的时候检测,如果闲暇工夫大于timeBetweenEvictionRunsMillis,执行validationQuery检测连贯是否无效。      test-while-idle: true      #既作为检测的间隔时间又作为testWhileIdel执行的根据      time-between-eviction-runs-millis: 60000      #销毁线程时检测以后连贯的最初流动工夫和以后时间差大于该值时,敞开以后连贯      min-evictable-idle-time-millis: 30000      #用来检测连贯是否无效的sql 必须是一个查问语句      #mysql中为 select 'x'      #oracle中为 select 1 from dual      validation-query: select 'x'      #申请连贯时会执行validationQuery检测连贯是否无效,开启会升高性能,默认为true      test-on-borrow: false      #偿还连贯时会执行validationQuery检测连贯是否无效,开启会升高性能,默认为true      test-on-return: false      #当数据库抛出不可复原的异样时,摈弃该连贯      exception-sorter: true      #是否缓存preparedStatement,mysql5.5+倡议开启      pool-prepared-statements: true      #当值大于0时poolPreparedStatements会主动批改为true      max-pool-prepared-statement-per-connection-size: 20

篇幅所限,对于Druid中的其余性能本文就先不波及了,后续有机会再进行介绍。

参考鸣谢

数据源:https://blog.csdn.net/dragon9...
数据源与连接池:https://www.cnblogs.com/chens...
Druid数据源的应用:https://juejin.cn/post/699320...
Druid启动器的应用:https://juejin.cn/post/699355...