1.什么是数据源?
数据源是连接到数据库的一类路径,它包含了访问数据库的信息(地址、用户名、密码)。
拓展:
数据库
数据库是一个容器,包含了很多数据,当然这些数据可能存在不同的小容器(表)里面。
若用水来形容数据,数据库就是水库。
数据源
数据源是连接到数据库的一类路径,它包含了访问数据库的信息(地址、用户名、密码)。
数据源就像是排水管道。
数据库连接
数据库连接是根据数据源产生的实际连接上数据库的路径。
数据库连接就像是管道里面的水管,这些水管都按照管道(数据源)的配置访问数据库。当打开了数据连接的时候,就像是打开了水管一样。
数据库连接池
每个数据源可能会配置数据库连接池,就像是排水管道的自动化系统。
数据库连接池的作用就是维护数据库连接,减少创建和删除数据库连接的操作,来达到减少数据访问时耗的目的。
https://blog.csdn.net/qq_31729917/article/details/104210499
springboot默认支持4种数据源类型
1. org.apache.tomcat.jdbc.pool.datasource
2. com.zaxxer.hikari.hikaridatasource
3. org.apache.commons.dbcp.basicdatasource
4. org.apache.commons.dbcp2.basicdatasource
/*
以上四种数据源都定义在
org.springframework.boot.autoconfigure.jdbc.datasourceautoconfiguration中
*/
datasourceautoconfiguration的自动加载
对于以上4种数据源,springboot 启动时会自动加载org.springframework.boot.autoconfigure.jdbc.datasourceautoconfiguration类 ,
通过自动配置为其生成datasource bean,datasource bean默认只会生成一个。
四种数据源类型的生效先后顺序如下:
tomcat-jdbc--> hikari --> dbcp --> dbcp2
新建springboot项目若未配置数据源的spring.datasource.url属性,启动项目时会报错,可通过配置或者在主程序类排除数据源自动配置类
//exclude 排除数据源自动配置类使其不自动加载
//但这种方式属于掩耳盗铃,虽然不报错了,但不加载数据源也就肯定不能链接数据库
@springbootapplication(exclude = datasourceautoconfiguration.class)
public class testapplication {
public static void main(string[] args) {
springapplication.run(testapplication.class, args);
}
}
2.1如何在一个springboot项目中配置数据源?
以jdbc数据源为例
1.pom文件中添加依赖
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
2.配置文件中添加配置
# application.properties文件中添加如下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useunicode=true&characterencoding=utf8
spring.datasource.driverclassname=com.mysql.jdbc.driver
spring.datasource.username=root
spring.datasource.password=123456
yml文件一样,换换格式
# application.yml文件中添加如下配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useunicode=true&characterencoding=utf8
driverclassname: com.mysql.jdbc.driver
username: root
password: 123456
2.2 如何切换默认数据源?
四种默认数据源依赖如下:
org.apache.tomcat
tomcat-jdbc
com.zaxxer
hikaricp
commons-dbcp
commons-dbcp
org.apache.commons
commons-dbcp2
在四种默认数据源中切换有两种方式
1.排除其他的数据源依赖项,仅保留需要的数据源依赖
假设我们要切换成hikaricp数据源。
由于tomcat-jdbc数据源优先级比hikaricp高,
且在引入spring-boot-start-jdbc依赖时,里面其实就已经包含了 tomcat-jdbc 的依赖,
因此若想要切换为hikaricp数据源,就需要先将已引入的tomcat-jdbc 依赖排除掉,
再添加上需要的hikaricp数据源依赖。
依赖配置如下:
org.springframework.boot
spring-boot-starter-jdbc
org.apache.tomcat
tomcat-jdbc
com.zaxxer
hikaricp
2.通过在核心配置中通过spring.datasource.type属性指定数据源的类型
# 在核心配置中通过添加spring.datasource.type = [数据源类型] 来指定数据源的类型;
spring.datasource.type=com.zaxxer.hikari.hikaridatasource
# spring.datasource.type=org.apache.tomcat.jdbc.pool.datasource
# spring.datasource.type=org.apache.commons.dbcp.basicdatasource
# spring.datasource.type=org.apache.commons.dbcp2.basicdatasource
2.3 如何使用第三方数据源?
若不想使用springboot默认支持的4种数据源,还可以选择使用其他第三方的数据源,eg:druid、c3p0等。
以使用druid数据源为例。
1.pom文件中添加依赖
org.springframework.boot
spring-boot-starter-parent
1.4.1.release
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
com.alibaba
druid
1.1.6
2.配置文件中添加配置
# application.properties文件中添加如下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test?useunicode=true&characterencoding=utf8
spring.datasource.driverclassname=com.mysql.jdbc.driver
spring.datasource.username=root
spring.datasource.password=123456
3.定义数据源
//使用注解@bean 创建一个datasource bean并将其纳入到spring容器中进行管理即可
@configuration
public class datasourceconfig {
//在核心配置文件中指定url、username、passward等属性的值
@autowired
private environment env;
@bean
public datasource getdatasource() {
druiddatasource datasource = new druiddatasource();
datasource.set);
datasource.setusername(env.getproperty("spring.datasource.username"));
datasource.setpassword(env.getproperty("spring.datasource.password"));
return datasource;
}
}
或者:
@data
@configuration
//在核心配置文件中指定url、username、passward等属性的值
@configurationproperties(prefix = "spring.datasource")
public class datasource2config {
private string url;
private string username;
private string password;
@bean
public datasource getdatasource() {
druiddatasource datasource = new druiddatasource();
datasource.set;
datasource.setusername(username);
datasource.setpassword(password);
return datasource;
}
}
或者:
@bean
@configurationproperties(prefix = "spring.datasource")
public datasource druiddatasource()
{
return new druiddatasource();
}