Spring Boot JDBC提供了使用引导和相关驱动去连接某数据库引用。
在Spring Boot JDBC中与数据库相关的bean有DataSouce,JdbcTemplate,NamedParamenterJdbcTemplate。在我们需要使用他的时候,可以使用自动注入的方式,如下例子:
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
在application.properties文件中,需要配置DataSource及connection pooling。Spring Boot默认会选择tomcat pooling的方式。
JDBC Connection Pooling
JDBC Connection pooling这机制包含管理并发连接的数据库请求,换句话来说,这个机制促进的连接的重用,数据库并发连接的内存缓存叫做连接池。连接池模块维护了所有关于标准JDBC驱动的连接。
如下图:
这个机制促进了数据库访问的速度,降低了数据库连接的数量。提升了我们程序的性能。Connection pool执行如下的任务:
1. 管理有效的连接;
2. 分配新的连接;
3. 关闭连接。
如上图,这个连接池中有4个连接和一个数据源,还有一些客户端。
第一张图里面有3个不同的连接,和1个空闲的连接。在第二张图里面Client 3被断开了连接,所有他将会变成空闲状态。
但客户端完成了工作,他将会释放连接,变成空闲状态。
HiKkariCP
Spring Boot 2.x中默认的连接池为HikariCP。他提供了企业级读数据的特点及更好的性能。HikariCP是JDCB数据源的实现,他提供了连接池机制。
注意以下几点:
1. HikariCP如果在环境变量中,Spring Boot会自动将其配置。
2. 如果在环境变量中找不到HikariCP,那么Spring Boot将会找Tomcat JDBC Connection Pool。
3. 如果上面2个都没找到,那么Spring Boot就会使用Apache Commons DBCP2充当JDBC Connection pool。
可以通过修改maven来配置connection pool。使用Tomcat JDBC connection Pool代替HikariCP,可以在maven中除掉HikariCP的依赖,添加tomcat-jdbc的依赖,如下pom.xml文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</ artifactId >
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</ artifactId >
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>9.0.10</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.9</version>
<socpe>runtime</scoope>
</dependency>
上面的maven使用了Tomcat connection pool。
另外可以通过显示配置的方式指定datasource,在application.properties中添加:
Spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
再application.properties配置如下增加性能:
spring.datasource.tomcat.initial-size=20
spring.datasource.tomcat.max-wait=25000
spring.datasource.tomcat.max-active=70
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=9
spring.datasource.tomcat.default-auto-commit=true
添加MySQL驱动如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
使用下面的配置文件连接数据库:
spring.datasource.url=jdbc:mysql://192.168.1.4:3306/test
spring.datasource.username=javatpoint
spring.datasource.password=password
Orcale数据库:
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=system
spring.datasource.password=Password123