生产有家医院系统报错,只看报错信息就是mapper执行sql时报错。服务受阻,无法正在运行。
但sql没有任何语法错误,只能猜想是否连接数据库有问题,通过telnet ip 端口 确认能连上db服务器,再猜想应用层面配置问题?数据库连接池获取不到可用连接?
打开配置文件查看
spring.datasource.initialSize=187
spring.datasource.minIdle=187
spring.datasource.maxActive=100
这个配置有点儿傻眼,直觉告诉我minIdle和initialSize相等,那不就等于所有连接都闲置但不能用么?但因为是直觉(实际上完全没理解这个minIdle的含义),对于做技术的人得用技术说话才是,还是默默打开搜索引擎看看druid这些配置项什么意思。
maxWait | -1 | 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 |
maxActive | 8 | 连接池最大活跃连接数量,当连接数量达到该值时,再获取新连接时,将处于等待状态,直到有连接被释放,才能借用成功 |
minIdle | 0 | 连接池最小空闲数量 |
initialSize | 0 | 初始化数据源时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 |
keepAlive | false | 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。实际项目中建议配置成true |
这个是搜了网上配置说明,但还是一头雾水, 连接池最小空闲数量。什么意思?什么算空闲?在池里创建了的连接,但没有被使用的连接么?那如果空闲连接数小于minIdle会怎么样呢?