使用数据库直接连接
对 MySQL 多半是进行连接(connection),增删改查并提交(execSQL、commit),关闭连接(close)操作,然后实现业务相关逻辑。其操作也很清晰:
- 建立TCP连接
- 验证数据库认证信息
- 发送请求(数据的 CRUD 操作)
- 关闭数据库连接
- 关闭TCP连接
数据库连接池
在业务量流量不大,并发量也不大的情况下,连接临时建立完全可以。 但并发量起来,达到百级、千级,其中建立连接、关闭连接的操作会造成性能瓶颈,所以得考虑连接池来托管 1、2、4、5 操作
- 从连接池取出连接(业务服务启动时,初始化若干个连接,放在连接池中)
- 发送请求
- 放回连接(执行完毕,把连接资源放回连接池中)
数据库连接池就是典型的用空间换时间的思想,系统启动预先创建多个数据库连接对象虽然会占用一定的内存空间,但是可以省去后面每次SQL查询时创建连接和关闭连接消耗的时间。
主流数据库连接池
spring集成druid
配置application-druid.yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/learn45?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
username: root
password: a123456b
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM sys_user
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall,log4j
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
stat-view-servlet:
url-pattern: /druid/*
allow: 127.0.0.1
deny: 192.168.31.253
reset-enable: false
login-username: root
login-password: 123
访问druid后台监控
http://localhost:8080/druid/login.html
|