我目前正在使用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,选择但没有找到记录?
我想知道为什么在插入完成后仍然无法找到事件?是因为时间延迟了吗?