SpringBoot配置Mysql连接池

一、HikariCP连接池

SpringBoot默认使用连接池HikariCP,不需要依赖。

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
        username: root
        password: root
        hikari:
         #最小空闲连接数量
         minimum-idle: 5
         #从池返回的连接默认自动提交
         auto-commit: true
         #空闲连接最大时间,10秒
         idle-timeout: 10000
         #池中连接的最长生命周期
         max-lifetime: 1800000
         #数据库连接的超时时间
         connection-timeout: 30000

二、druid连接池

点击查看springboot访问数据库的静态连接方式

spring:
    datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
          username: root
          password: root
          # 初始化大小,最小,最大
          initial-size: 5
          max-active: 20
          min-idle: 3
          # 配置获取连接等待超时的时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 300000 
          # 打开PSCache,并且指定每个连接上PSCache的大小
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 20
          # 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙   日志 log4j
          filters: stat,wall,slf4j
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

引入依赖

二者选其一

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
</dependency>

创建配置类

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}

三、数据库连接字符串说明

jdbc: mysql://localhost:3306/mall?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
参数名称参数说明缺省值最低版本要求
user数据库用户名(用于连接数据库) 所有版本
password用户密码(用于连接数据库) 所有版本
useUnicode是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为truefalse1.1g
characterEncoding当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbkfalse1.1g
autoReconnect当数据库连接异常中断时,是否自动重新连接?false1.1
autoReconnectForPools是否使用针对数据库连接池的重连策略false3.1.3
failOverReadOnly自动重连成功后,连接是否设置为只读?true3.0.12
maxReconnectsautoReconnect设置为true时,重试连接的次数31.1
initialTimeoutautoReconnect设置为true时,两次重连之间的时间间隔,单位:秒21.1
connectTimeout和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本03.0.1
socketTimeoutsocket操作(读写)超时,单位:毫秒。 0表示永不超时03.0.1

jdbc:mysql://localhost:3306/mall

连接本地数据库: mall,端口号:3306

useUnicode=true&characterEncoding=UTF-8

解决乱码问题:设置为true和utf8以支持Unicode字符集和正确的字符编码。

serverTimezone=UTC

为什么要设置serverTimezone=UTC,是因为JDBC连接Mysql6 以上com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone:
UTC为世界标准时间,比北京时间早8个小时
也可以设置serverTimezone=CST或者设置为serverTimezone=Asia/Shanghai
CST表示上海

useSSL=false

在mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false,useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false。

autoReconnect=true&failOverReadOnly=false

设置autoReconnect=true以允许连接在断开后尝试重新连接。
设置failOverReadOnly=false以防止在故障转移时连接被设置为只读。

zeroDateTimeBehavior=convertToNull

当从数据库读取日期或时间值为 '0000-00-00 00:00:00' 时,JDBC 驱动程序会将其转换为 Java 中的 null 值。这可以帮助避免在 Java 应用程序中出现由于无效日期时间值而导致的错误或异常。

rewriteBatchedStatements=true

当这个参数设置为 true 时,它告诉驱动尝试重写批处理(batched)的 SQL 语句,以便更高效地执行它们。

效果如下:

INSERT INTO table_name (column1, column2) VALUES (value1a, value2a), (value1b, value2b), (value1c, value2c);
posted @ 2023-07-25 09:55  盗梦笔记  阅读(2722)  评论(0编辑  收藏  举报