Spring Boot 配置数据源

版权声明:From Lay https://blog.csdn.net/Sadlay/article/details/83717138

配置数据源

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

启动默认数据源

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>

这里引入了JPA的依赖。对JPA来说,在spring boot中是依赖Hibernate去实现的。

这样我们就可以在不使用任何配置数据库的情况下运行Spring Boot工程了,因为h2是内嵌式数据库,它会随着Spring Boot项目的启动而启动,斌不是需要任何的配置。

内存数据库在应用上并不广泛,更多的额时候我们希望使用的商用数据库,如MySQL和Oracle等。

配置自定义数据源

以MySQL作为自定义数据源。首先在pom.xml中去除对h2的依赖。保留spring-boot-starter-data-jpa的依赖,然后增加Mysql的依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

配置数据库相关信息

配置application.properties配置文件。在默认情况下,spring boot会使用其绑定的Tomcat的数据源,我们可以对其进行设置。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_database
spring.datasource.username=root
spring.datasource.password=123456
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#最大等待连接中的数量,设置0为没有限
spring.datasource.tomcat.max-idle=10
#最大连接活动数
spring.datasource.tomcat.max-active=50
#最大等待毫秒数,单位ms,超过时间会出错误信息
spring.datasource.tomcat.max-wait=10000
#数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5

注意这里注释掉了spring.datasource.driver-class-name=com.mysql.jdbc.Driver驱动类的配置,但是它还是可以连接数源的,这是因为Spring Boot会尽可能地去判断数据源是说明类型的,然后根据默认的情况去匹配驱动类。在它不能匹配的情况下,你可以明确的配置它,这样就不会使用默认的驱动类了。

上面是用的是Tomcat自带的数据库连接池,所以可以看到很多tomcat的字样。有时候我们希望使用的是第三方数据源。例如DBCP数据源。

配置DBCP数据源

maven中添加DBCP数据源依赖

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

在application.properties文件中配置dbcp数据源

spring.datasource.url=jdbc:mysql://192.168.3.253:3306/springboot_database
spring.datasource.username=developer
spring.datasource.password=1q@W3e$R
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定数据连接池的类型
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
#最大等待连接中的数量,设置0为没有限
spring.datasource.dbcp2.max-idle=10
#最大连接活动数
spring.datasource.dbcp2.max-total=50
#最大等待毫秒数,单位ms,超过时间会出错误信息
spring.datasource.dbcp2.max-wait-millis=10000
#数据库连接池初始化连接数
spring.datasource.dbcp2.initial-size=5

我们通过spring.datasource.type属性指定了数据库连接池的类型,然后使用spring.datasource.dbcp2.*去配置数据库连接池属性。

为了验证,我们创建一个Bean

DataSourceShow

package com.lay.db;

import javax.sql.DataSource;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class DataSourceShow implements ApplicationContextAware {
    
    ApplicationContext applicationContext = null;
    
    @Override
    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("-----------------------");
    }
    
}

启动查看打印日志

2018-10-29 11:26:33.614  INFO 1192 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-----------------------
org.apache.commons.dbcp2.BasicDataSource
-----------------------

显然这里使用了DBCP2的数据库连接池提供服务。

其他的第三方数据源我们也可以通过类似的方法去配置。

猜你喜欢

转载自blog.csdn.net/Sadlay/article/details/83717138
今日推荐