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文件中添加依赖

	<dependencies>
		<!-- 添加MySQL依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 添加JDBC依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
	</dependencies>

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 如何切换默认数据源?

四种默认数据源依赖如下:

     <!-- 添加Tomcat-JDBC依赖 -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jdbc</artifactId>
		</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>

在四种默认数据源中切换有两种方式

1.排除其他的数据源依赖项,仅保留需要的数据源依赖

假设我们要切换成HikariCP数据源

由于Tomcat-JDBC数据源优先级比HikariCP高,
且在引入spring-boot-start-jdbc依赖时,里面其实就已经包含了 Tomcat-JDBC 的依赖,
因此若想要切换为HikariCP数据源,就需要先将已引入的Tomcat-JDBC 依赖排除掉,
再添加上需要的HikariCP数据源依赖。

依赖配置如下:

<!-- 添加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>

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文件中添加依赖

	<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>
	<dependencies>
		<!-- 添加MySQL依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 添加JDBC依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!-- 添加Druid依赖 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.6</version>
		</dependency>
	</dependencies>

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.setUrl(env.getProperty("spring.datasource.url"));
		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.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		return dataSource;
	}
}

或者:

@Bean
	@ConfigurationProperties(prefix = "spring.datasource")
	public DataSource druidDataSource()
	{
		return new DruidDataSource();
	}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐