深入浅出springboot2.x(8)配置数据源

配置数据源

在依赖spring boot的spring-boot-starter-data-jpa后,它就会默认为你配置数据源,这些默认的数据源主要是内存数据库,如h2、hqldb和Derby等内存数据,有时候需要配置为我们想要的数据源。

启动默认数据源

h2数据库为例,在maven中加入它的依赖

		
            com.h2database
            h2
        
		
			org.springframework.boot
			spring-boot-starter-data-jpa
		

这里引入了JPA得依赖。对JPA来说,在springboot中是依赖Hibernate去实现的,因此我们可以看到在maven依赖包下存在很多与Hibernate相关的jar。
这样我们就可以在不使用任何配置数据库的情况下运行springboot工程了,因为h2是内嵌式数据库,它会随着项目的启动而启动,并不需要任何配置。不过更多时候我们希望使用的是商用数据库,如MySQL和Oracle。

配置自定义数据源

以MySQL为例,删除maven中h2的依赖,保留spring-boot-starter-data-jpa的依赖,增加MySQL的依赖。

		
			mysql
			mysql-connector-java
		
		
			org.springframework.boot
			spring-boot-starter-data-jpa
		

这显然还不足以连接数据源,还需要配置数据库的相关信息才能连接到数据库。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#最大等待连接中的数量,设置0为没有限
spring.datasource.tomcat.max-idle=10
#最大连接活动数
spring.datasource.tomcat.max-active=50

spring.jpa.database = MYSQL
#最大等待毫秒数,单位为ms,超过时间会出错误信息
spring.datasource.tomcat.max-wait=10000
#数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5

这样我们就完成了springboot的数据源配置。spring.datasource.url=jdbc:mysql://localhost:3306/test是数据库地址,后面是区时配置,在后面jpa会用到。这只是匹配springboot绑定的Tomcat的数据源,有时候我们希望使用第三方数据源,例如dbcp,只需要添加maven依赖,配置dbcp2数据源就可以了,在这里就不展示DBCP2的具体配置信息了。
测试:

package com.example.JPAdemo;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

//实现spring bean生命周期接口ApplicationContextAware
@Component
public class DataSourceShow implements ApplicationContextAware {
    ApplicationContext applicationContext = null;
    @Override
    //spring容器会自动调用这个方法,注入spring IOC容器
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        DataSource dataSource =applicationContext.getBean(DataSource.class);
        System.out.println("------------");
        System.out.println(dataSource.getClass().getName());
        System.out.println("------------");
    }
}

上述代码中实现了接口ApplicationContextAware的方法setApplicationContext(),依照springbean生命周期的规则,在其初始化的时候该方法就会被调用,从而获取springioc容器的上下文(ApplicationContext ),通过getBean获取数据库连接池,输出日志:

------------
org.apache.tomcat.jdbc.pool.DataSource
------------

你可能感兴趣的:(深入浅出springboot2.x(8)配置数据源)