两个JVM实例访问同一个DB引起的幻读如何解决
微服务程序A部署了两套,分别位于两个tomcat中,两个tomcat后端挂的是同一个DB。微服务程序中在初始化的时候会从DB中 select一批数据到内存,读取的原则是:先从【游标表】中获取到资源表的【当前可用位置】,然后【从此位置】开始读取资源表的一批数据到内存。现在出现的问题是:tomcat1和tomcat2重启的时候都从DB读取到了一模一样的数据到内存中?如何解决读取到同一批数据的问题。此问题暂时只在重启的时候出现过,其它正常访问的时候暂未发现。
从【游标表】中读取资源表【可用位置】的时候加锁处理了,代码如下——
@SuppressWarnings("unchecked")
public T getForUpdate(Serializable id) throws DataAccessException, Exception {
return (T) getHibernateTemplate().get(type(), id, LockMode.UPGRADE);
}