atfa 发表于 2017-3-19 23:21:55

两台tomcat连接一台MySQL单库会存在线程见数据不同步的情况吗?

各位高手,现遇一奇怪问题,请教一下:

背景如图:


一台mysql,timeout设为120秒。
两台tomcat,分别给用户和管理员提供web服务。
两台tomcat服务器连接池配置参数是一样的:

1
2
3
4
5
6
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" validationQuery="SELECT 1"
testOnBorrow = "true" testWhileIdle = "true" timeBetweenEvictionRunsMillis = "30000"
minEvictableIdleTimeMillis = "1800000" numTestsPerEvictionRun="3"
maxIdle="90" maxActive="100" minIdle="10" initialSize="10"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"






遇到的问题:
用户下单后,管理员收到了邮件,但是根据邮件中的订单号在管理页面上搜不到信息,告诉我,几个小时后,我有时间登录后台管理页面查询,的确查不到数据,于是直接从我的电脑上用HeiDiSQL连接到mysql,查询订单号发现数据库里面是有数据的。于是重启了tomcat2,也就是管理后台的tomcat,再次通过管理页面查询,订单信息就能查出来了。

自己的分析:
1、曾经怀疑过是tomcat1在保存这个订单时遇到锁,tomcat2查询时就没有查出来。但是这样的情况重启tomcat2也应该没用啊,而且我直接登录到数据库,发现数据是存在的,因此排除了锁的问题。
2、由于重启了tomcat2就能解决问题,分析重启这个动作的本质,就是断开tomcat2到mysql的所有线程,重新建立新的连接。
3、如果分析2成立,那么就意味着mysql不同线程之间数据是不同步的?那如果一个连接持续了数个小时,那查询到的数据岂不是数个小时之前的数据了?绝对不会这样吧?

请教一下各位:
上面的问题是什么原因?应该怎么样避免和解决呢?谢谢。
页: [1]
查看完整版本: 两台tomcat连接一台MySQL单库会存在线程见数据不同步的情况吗?