KOCA应用数据源配置推荐

问题背景

应用程序在长时间运行后(尤其在低峰期),部分业务请求出现SQL执行超时,或者连接异常的报错, 类似:

The last packet successfully received from the server was xxx milliseconds ago.

再次请求数据库又能正常访问。

问题原因

● 默认超时机制:数据库如Mysql存在超时机制,若连接空闲超过一段时间(可设置),数据库主动关闭连接,导致客户端请求时异常。

● 防火墙/NAT会话超时:中间网络设备可能设置更短的TCP会话超时(如30分钟),也会导致连接失效。

推荐配置

在jdbc.yml数据源中添加如下配置,可以解决以上数据库重连超时问题

        url: jdbc:xxx://ip:port/dbname?param1=xx1&param2=xx2 #jdbc url连接配置
        driverClassName: com.goldendb.jdbc.Driver #国产数据库驱动按需要配置
        username: xxx 
        password: xxx
        initialSize: 2 #连接池初始化大小,根据业务场景配置,默认0
        minIdle: 2     #连接池最小空闲连接数,根据业务场景配置,默认0 
        maxActive: 32#连接池最大连接数,根据业务场景配置,默认8
        maxWait: 60000  #连接池最大等待时间,根据业务场景配置,默认-1无限制
        keepAlive: true #是否开启连接心跳保活,默认false
        validationQuery: SELECT 1 FROM DUAL #心跳是用的sql,默认不配置,会根据driverClassName来自动配置,mysql是SELECT 1  oracle是 SELECT 1 FROM DUAL , 也可以使用查询业务空表来做心跳
        minEvictableIdleTimeMillis: 300000 #空闲5分钟以上的连接被移除,但会保留minIdle配置的连接数不进行移除, 默认30分钟
        maxEvictableIdleTimeMillis: 1800000 #空闲30分钟以上的连接被移除,与minIdle无关, 默认7小时

关键是以下配置:
keepAlive: true #是否开启连接心跳保活,默认false
minEvictableIdleTimeMillis: #最小空闲连接时间
maxEvictableIdleTimeMillis: #最大空闲连接时间