记录已插入但仍未找到

时间:2017-06-18 09:41:50

标签: java spring spring-mvc jdbctemplate

我目前正在使用java spring jdbctemplate来插入和选择记录。但是,现在系统已经投入生产,一些问题已经发生。该系统将通过某些键选择记录来防止记录重复,以检查它是否已存在。但是,我注意到插入数据库后的第一个事务,然后第二个事务进来,jdbc模板选择仍然显示没有找到记录?我注意到如果2个事务是在一毫秒之内提交的话,就会发生这种情况......

记录时间是

e.g。

第1次记录插入 - 15/6/17 12:22:39,986 - 插入成功

第二条记录选择 - 15/6/17 12:22:44,680 - 未找到搜索记录显示?

样本插入日志

15/6/17 12:22:39,937 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:869) Executing prepared SQL update
15/6/17 12:22:39,938 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:616) Executing prepared SQL statement [INSERT INTO ...;]
15/6/17 12:22:39,950 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:879) SQL update affected 1 rows
15/6/17 12:22:39,951 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:869) Executing prepared SQL update
15/6/17 12:22:39,952 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:616) Executing prepared SQL statement [INSERT INTO ...;]
15/6/17 12:22:39,965 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.core.JdbcTemplate:879) SQL update affected 1 row
15/6/17 12:22:39,970 DEBUG [30:http-nio-8080-exec-2] (org.springframework.jdbc.datasource.DataSourceUtils:327) Returning JDBC Connection to DataSource

样本选择日志

15/6/17 12:22:44,680 DEBUG [29:http-nio-8080-exec-1] (org.springframework.jdbc.core.JdbcTemplate:682) Executing prepared SQL query
15/6/17 12:22:44,680 DEBUG [29:http-nio-8080-exec-1] (org.springframework.jdbc.core.JdbcTemplate:616) Executing prepared SQL statement [SELECT * FROM ...]

请注意,使用负载平衡将此系统设置在2个不同的服务器中。它们都指向同一个数据库。插入在服务器1上完成,因为它已经返回到jdbc连接池的连接。一个新的事务进入服务器2,选择但没有找到记录?

我想知道为什么在插入完成后仍然无法找到事件?是因为时间延迟了吗?

1 个答案:

答案 0 :(得分:0)

这个问题已经解决了。这是由于服务器时间不一致。谢谢 RealSkeptic