SpringBoot(12) - 数据源(1) - 使用默认数据源

SpringBoot默认支持4种数据源类型,定义在org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:

  • org.apache.tomcat.jdbc.pool.DataSource
  • com.zaxxer.hikari.HikariDataSource
  • org.apache.commons.dbcp.BasicDataSource
  • org.apache.commons.dbcp2.BasicDataSource

对于这4种数据源,当 classpath下有相应的类存在时,SpringBoot 会通过自动配置为其生成DataSource Bean,DataSource Bean默认只会生成一个,四种数据源类型的生效先后顺序如下:Tomcat > Hikari > Dbcp > Dbcp2 。
如果你使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa的starter POMs,将会自动添加对tomcat-jdbc的依赖。

注:如果你定义自己的DataSource bean,自动配置不会发生。

 

一、配置默认数据源tomcat-jdbc

1. pom.xml

<!-- jdbc 自动添加tomcat-jdbc的依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.36</version>
</dependency>

2. application.yml

主配置文件,通过spring.datasource.*配置数据源相关特性。默认使用tomcat-jdbc数据源,这里简单配置下即可使用。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/datasource?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

3. 测试数据源

@RunWith(SpringRunner.class)
@SpringBootTest
public class DataSourceTest {
    @Autowired
    private DataSource dataSource;

    @Test
    public void testDataSource() {
        System.out.println(dataSource);
    }
}

输出结果:

可以看出是使用的是org.apache.tomcat.jdbc.pool.DataSource,也就是tomcat-jdbc

org.apache.tomcat.jdbc.pool.DataSource@6b00ad9{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=com.mysql.jdbc.Driver; maxActive=100; maxIdle=100; minIdle=20; initialSize=20; maxWait=10000; testOnBorrow=false; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=true; testOnConnect=false; password=********; url=jdbc:mysql://localhost:3306/datasource; username=root; validationQuery=/* ping */ SELECT 1; validationQueryTimeout=-1; validatorClassName=null; validationInterval=3000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; useStatementFacade=true; }

 

二、使用默认的Hikari、Dbcp、Dbcp2 数据源

方式一:

通过在pom中排除tomcat-jdbc,只添加任意一个数据源依赖即可;application.yml的配置同上。

<!-- jdbc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <!-- 排除tomcat-jdbc依赖 -->
        <exclusion>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- HikariCP -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

<!-- dbcp -->
<!--<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
</dependency>-->

<!-- dbcp2 -->
<!--<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
</dependency>-->

方式二:

在application.yml中通过spring.datasource.type=[数据源]指定数据源类型,pom中添加对应数据源依赖即可。

spring: 
    datasource: 
        type: com.zaxxer.hikari.HikariDataSource
#    org.apache.tomcat.jdbc.pool.DataSource
#    org.apache.commons.dbcp.BasicDataSource
#    org.apache.commons.dbcp2.BasicDataSource

方式三:

手动初始化DataSource,不使用自动配置生成的数据源。

 

参考:https://blog.csdn.net/pengjunlee/article/details/80081231

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值