TongWeb生产环境配置规范之二:数据源配置

张开发
2026/5/3 14:51:06 15 分钟阅读
TongWeb生产环境配置规范之二:数据源配置
一、数据库驱动包选择数据库驱动包由数据库厂商提供另外若应用采用hibernate等持久框架还需要国产数据库提供方言类包如: 达梦的DmDialect-for-hibernate3.0.jar。确认数据库版本对应的数据库驱动包的版本。确认数据库驱动包支持的JDK版本与JDBC规范目前普遍支持JDK1.8及以上支持JDBC4.0规范。错误的方式从网上下载数据库驱动包直接用不考虑版本兼容性。二、数据库驱动包的存放若应用采用自带开源数据源则数据库驱动包放在应用或公共库类路径下。若采用TongWeb数据源则建议把数据库驱动包直接放在TongWeb的lib目录下这样数据源与应用采用同一份驱动。若存在一个TongWeb上配置多个同一类型数据库但数据库版本不同、对应驱动包版本也不同的情况时不能将所有驱动包放在TongWeb的lib下。 需要放置在其它目录下在配置数据源时指定对应的数据库驱动包。三、数据源参数的配置1. 基础参数配置参数说明最小连接数根据业务系统并发量设置最大连接数根据业务系统并发量设置注意不得超过数据库可用连接数否则超出数据库限制。创建连接时验证建议开启项以确保应用获取有效的数据库连接。获取连接时验证归还连接时验证验证方式方式一通过connection.isValid()方法验证推荐方式方式二通过SQL语句需用最简单的SQL语句。验证间隔连接验证不是应用每次获取连接都验证而是有一定的时间间隔。通常默认值即可若网络或数据库不稳定导致的连接不稳定建议把验证间隔设短。空闲连接检查建议开启项当业务不忙时连接池中空闲的连接数大于连接池的最小连接数时可以释放连接保持最小连接数避免一直占用数据库连接。URL参数/连接参数不同数据库有不同的参数通常在URL或连接参数中配置如connectiontimeout、sockettimeout、serverTimezone等等具体由数据库驱动来设置。2. SQL与连接泄露场景若应用系统在运行一段时间后数据源连接占满而长时间不释放则可能存在连接泄露的问题应用没有对连接进行关闭而又不能修复代码解决这时需要配置以下参数。参数说明即时泄露回收遇到泄露问题无法修复应用代码时建议开启项该功能是当http请求处理完成后回收连接。但对于应用自启线程使用数据源连接情况无法跟踪关闭连接。泄露超时时间上线初期建议开启超时时间设为60秒。 在超时时打出stack traces 日志通过日志查找应用代码泄露的位置。泄漏时记录日志泄露回收/关闭连接若无法修复应用代码则需要开启强制回收连接功能需考虑业务最长SQL时间使“泄露超时时间” 大于业务最长SQL时间再开启。以免中断正常的业务。TongWeb8 增加一个“泄漏判定比例 ” 80%再关闭连接。语句跟踪/自动关闭语句当应用statement未关闭造成游标泄露时建议开启该项。跟踪语句堆栈TongWeb8功能打出stack traces 日志可以分析应用statement泄露位置。3. 慢SQL场景监控有哪些慢SQL影响业务可以针对性的对SQL进行优化。参数说明慢SQL检测时间上线初期建议开启 设置慢SQL的检测时间记录慢的SQL进行优化。慢SQL日志SQL超时本质是设置statment的setQueryTimeout方法若应用SQL长时间执行阻塞无法解决可以设置此值中止SQL执行。4. MySQL驱动兼容针对以mysql驱动为主的国产数据库TongWeb7 需要开启“Mysql驱动兼容 ”选项。具体原因见关于TongWeb数据源兼容mysql驱动的注意事项-CSDN博客5. SQL异常关闭连接TongWeb8.0 建议开启“SQL错误时回收” 当SQL异常时会回收当前连接。TongWeb7.0无此项默认SQL异常时就会回收当前连接。否则可能因为SQL异常数据库已经关闭连接而连接池还给应用提供无效的连接导致报错如下org.postgresql.util.PSQLException: This connection has been closed. at org.postgresql.jdbc.PgConnection.checkClosed(PgConnection.java:1009) at org.postgresql.jdbc.PgConnection.createStatement(PgConnection.java:1850) at org.postgresql.jdbc.PgConnection.createStatement(PgConnection.java:529) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)6. 线程关联若遇到一个请求处理线程需要同时占用多个数据源连接的场景建议开启线程关联。这样在一次请求处理中占用的是同一个数据源连接对象。若一次请求处理中涉及嵌套事务事务提交的场景则不能开启该功能。常见错误的方式上线初期容易出性能问题未开启慢SQL日志泄露日志。最大连接数配置过大超过数据库允许的连接数。驱动包版本过老。

更多文章