Java tomcat jdbc池如何缓存查询结果?

Java tomcat jdbc池如何缓存查询结果?,java,tomcat,jdbc,jdbc-pool,Java,Tomcat,Jdbc,Jdbc Pool,我遇到了一个问题,即TomcatJDBC池与hibernate缓存查询结果,但我已经禁止hibernate的缓存 但当我将jdbc池切换到DBCP时,问题就消失了。所以我确保TomcatJDBC池中有一个查询结果缓存,但我还没有找到任何关于这个问题的文档 有人能告诉我如何关闭tomcat jdbc池中的查询缓存吗? 它在tomcat-jdbc-7.0.47中运行,配置如下 <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.Da

我遇到了一个问题,即TomcatJDBC池与hibernate缓存查询结果,但我已经禁止hibernate的缓存

但当我将jdbc池切换到DBCP时,问题就消失了。所以我确保TomcatJDBC池中有一个查询结果缓存,但我还没有找到任何关于这个问题的文档

有人能告诉我如何关闭tomcat jdbc池中的查询缓存吗? 它在tomcat-jdbc-7.0.47中运行,配置如下

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url"
              value="jdbc:mysql://192.168.1.104:3306/uip_test_1?useUnicode=true&amp;characterEncoding=UTF8&amp;zeroDateTimeBehavior=convertToNull"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="defaultAutoCommit" value="false"/>
    <!--<property name="initialSize" value="10" />-->
    <property name="maxActive" value="40"/>
    <property name="maxIdle" value="10"/>
    <property name="maxWait" value="60000"/>
    <property name="testOnBorrow" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="3600000"/>
    <property name="testWhileIdle" value="true"/>
    <property name="validationQuery" value="select 1 from dual"/>
</bean>


有一条语句“您可以使用拦截器收集查询统计信息、缓存会话状态、在失败时重新连接、重试查询、缓存查询结果等”,这意味着默认情况下不会这样做。但实际上,它确实做到了,它缓存了。你能发布一个小的代码示例来解释为什么你认为它缓存了结果吗?我更改了数据库中的值,但是,当我使用tomcat jdbcOk查询它时,它没有更改。因此,这不是查询缓存,而是实体缓存。这可能是某种隔离问题。您是否使用与Tomcat的池和DBCP的池完全相同的数据库?即使是这样,Tomcat的池也可能在底层数据库上设置了与DBCP不同的隔离级别。您是否在任一池上设置defaultTransactionIsolation?另外,您是如何执行测试查询的?您是在编写数据,然后在同一事务中查询数据,还是在不同事务中查询数据?您是否在查询之前提交事务?