开发者社区> 问答> 正文

1.0.26 版本还是存在select 'x' 报异常的问题

异常如下: 11-03 16:22:21.860 catalina-exec-31 ERROR d.s.Statement - {conn-10001, stmt-20019} execute error. SELECT 'x' com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

设置如下:

<!-- 初始化连接数 -->
<property name="initialSize" value="1"/>
<!-- 最小空闲连接数 -->
<property name="minIdle" value="1"/>
<!-- 最大连接数 -->
<property name="maxActive" value="20"/>
<!-- 当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 -->
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000"/>

<!-- 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒,10分钟 -->
<property name="timeBetweenEvictionRunsMillis" value="600000"/>

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 30分钟 1800000 -->
<property name="minEvictableIdleTimeMillis" value="1800000"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="10000"/>

<!--用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录-->
<property name="validationQuery" value="SELECT 'x'"/>
<!-- 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.注意:
设置为true后如果要生效,validationQuery参数必须设置为非空字符串 -->
<property name="testWhileIdle" value="true"/>
<!-- 默认值是 true ,当从连接池取连接时,验证这个连接是否有效 -->
<property name="testOnBorrow" value="false"/>
<!-- 默认值是 false, 当把该连接放回到连接池的时,验证这个连接是否有效 -->
<property name="testOnReturn" value="false"/>

<!-- mysql 5.5以上打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="50"/>

<!-- 配置监控统计拦截的filters stat, -->
<property name="filters" value="slf4j"/>
<property name="proxyFilters">
    <list>
        <ref bean="stat-filter"/>
        <ref bean="wall-filter"/>
    </list>
</property>

在sql监控里面,看到执行select 'x' 只执行了几次 并没有按照设置的去检测连接。之前的版本都没有这些问题,1.0.20之前。

原提问者GitHub用户ghost

展开
收起
山海行 2023-07-05 21:28:07 94 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果您在使用1.0.26版本的MyBatis时,仍然遇到了执行"select 'x'"语句时抛出异常的问题,可能是因为MyBatis的某些配置不正确或者存在其他问题。以下是一些可能的解决方法:

    检查MyBatis配置
    请检查您的MyBatis配置文件,确保配置正确。特别注意以下几个配置项:

    datasource.driver
    datasource.url
    datasource.username
    datasource.password
    这些配置项对于数据库连接非常重要,如果不正确,可能会导致无法连接数据库或者执行SQL语句时出现异常。

    检查数据库连接
    请检查您的数据库连接是否正常。您可以尝试手动连接数据库,并执行"select 'x'"语句,看是否可以正常执行。如果无法正常执行,可能是因为数据库配置不正确或者数据库本身存在问题,需要进一步排查。

    尝试使用其他SQL语句
    如果以上方法都无法解决问题,您可以尝试使用其他SQL语句,例如"select 1"或者"select count(*) from table"等,看是否可以正常执行。如果其他SQL语句可以正常执行,但"select 'x'"语句仍然出现异常,可能是因为MyBatis的某些配置或者代码存在问题,需要进一步排查。

    2023-07-30 09:36:39
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据您提供的信息,您遇到的问题是在使用 1.0.26 版本时,无法成功执行 SELECT 'x',报告了 Communications link failure 异常。

    这个问题可能由多个因素引起。以下是一些您可以尝试的解决方法:

    1. 检查网络连接:确保您的服务器可以正常连接到数据库服务器。尝试使用其他工具或客户端连接数据库以确认网络连接正常。

    2. 检查数据库配置:请确保您的数据库配置正确并与您的应用程序配置匹配。检查数据库的主机名、端口号、用户名和密码等信息是否正确。

    3. 检查数据库状态:检查数据库服务器的运行状态,确保它正在正常运行,并且没有达到最大连接数或其他限制。查看数据库服务器的日志文件以获取更多信息。

    4. 调整连接池配置:您可以尝试调整连接池的配置参数来优化连接的管理。例如,适当调整 initialSizemaxActivemaxIdleminIdlemaxWait 等参数,以满足您的应用程序的需求。

    5. 检查数据库驱动程序版本:确保您正在使用与数据库服务器版本兼容的数据库驱动程序。如果您使用的是较旧的驱动程序版本,尝试升级到最新版本。

    6. 检查数据库服务器配置:检查数据库服务器的配置,确保它允许来自应用程序的连接和查询。特别注意数据库防火墙、权限和限制等设置。

    如果您尝试了以上解决方法仍然无法解决问题,我建议您联系数据库管理员或技术支持团队,以获取进一步的帮助和支持。

    2023-07-11 19:38:28
    赞同 展开评论 打赏
  • <!-- 此配置项会影响性能,只在排查的时候打开。系统运行时最好关闭。 -->
    <!-- 超过时间限制是否回收 -->
    <property name="removeAbandoned" value="false"/>
    <!-- 超时时间;单位为秒。180秒=3分钟 -->
    <property name="removeAbandonedTimeout" value="180"/>
    <!-- 关闭abanded连接时输出错误日志 -->
    <property name="logAbandoned" value="true"/>
    

    是因为配置了这个超时限制回收产生的错误日志输出。

    原回答者GitHub用户ghost

    2023-07-06 12:14:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载