SpringBoot关于JDBC数据源详解

本篇文章主要记录SpringBoot当中使用JDBC数据源相关知识,感兴趣的跟小编一起来学习呀。

1、代码展示

pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

application.properties

spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://192.168.1.110:3306/jdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

测试类,测试默认连接数据源

@SpringBootTest
class SpringBootJdbcApplicationTests {
    
    
	
	@Autowired
	DataSource dataSource;

	@Test
	void contextLoads() throws SQLException {
    
    
		System.out.println(dataSource.getClass());
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
		connection.close();
	}

}

效果:
springboot 1.5.10默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源;
springboot 2.4.3 默认是用 class com.zaxxer.hikari.HikariDataSource作为数据源;
数据源的相关配置都在DataSourceProperties里面;

2、自动配置原理

参考DataSourceConfiguration,根据配置创建数据源,可以使用 spring.datasource.type指定自定义的数据源类型;

3、SpringBoot默认支持数据源

在这个配置类当中可以查看DataSourceConfiguration

SpringBoot的2.4.3版本支持五种数据源
1、org.apache.tomcat.jdbc.pool.DataSource
2、com.zaxxer.hikari.HikariDataSource
3、org.apache.commons.dbcp2.BasicDataSource
4、oracle.ucp.jdbc.PoolDataSource
5、还可以自定义数据源

	@Configuration(proxyBeanMethods = false)
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type")
	static class Generic {
    
    

		@Bean
		DataSource dataSource(DataSourceProperties properties) {
    
    
		//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
			return properties.initializeDataSourceBuilder().build();
		}

	}

4、常用的主流开源数据库连接池

常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等

C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。

扫描二维码关注公众号,回复: 12850906 查看本文章

DBCP (Database Connection Pool):由Apache开发的一个Java数据库连接池项目, Jakarta commons-pool对象池机制,Tomcat使用的连接池组件就是DBCP。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar,预先将数据库连接放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完再放回。单线程,并发量低,性能不好,适用于小型系统。

Tomcat Jdbc Pool:Tomcat在7.0以前都是使用common-dbcp做为连接池组件,但是dbcp是单线程,为保证线程安全会锁整个连接池,性能较差,dbcp有超过60个类,也相对复杂。Tomcat从7.0开始引入了新增连接池模块叫做Tomcat jdbc pool,基于Tomcat JULI,使用Tomcat日志框架,完全兼容dbcp,通过异步方式获取连接,支持高并发应用环境,超级简单核心文件只有8个,支持JMX,支持XA Connection。

BoneCP:官方说法BoneCP是一个高效、免费、开源的Java数据库连接池实现库。设计初衷就是为了提高数据库连接池性能,根据某些测试数据显示,BoneCP的速度是最快的,要比当时第二快速的连接池快25倍左右,完美集成到一些持久化产品如Hibernate和DataNucleus中。BoneCP特色:高度可扩展,快速;连接状态切换的回调机制;允许直接访问连接;自动化重置能力;JMX支持;懒加载能力;支持XML和属性文件配置方式;较好的Java代码组织,100%单元测试分支代码覆盖率;代码40KB左右。

Druid:Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。

5、springboot启动自动执行sql

application.properties当中添加
schema.sql是指定文件名称

#spring某个版本之后需要加上这句,否则不会自动执行sql文件
spring.datasource.initialization-mode=always
# schema.sql中一般存放的是建表语句
spring.datasource.schema = classpath:schema.sql
# data.sql中一般存放的是需要插入更新等sql语句
spring.datasource.data =  classpath:data.sql

6、操作数据库

自动配置了JdbcTemplate操作数据库

简单用法

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/114808769
今日推荐