我们使用1.3.5版本创建了一个spring boot项目。我们的应用程序与Mysql数据库交互。 我们已经创建了一组jpa-repositories,我们在其中使用findAll,findOne和其他自定义查询方法。
我们正面临一个随机发生的问题。以下是重现它的步骤:
使用spring-boot应用程序在db上触发读取查询。
现在使用mysql-console手动更改Mysql中的数据,这些记录由上面的读取查询返回。
再次使用应用程序触发相同的读取查询。
在第3步之后,我们应该收到第2步的修改结果,但我们得到的是修改前的数据。
现在,如果我们再次使用应用程序触发读取查询,它会为我们提供正确的值。
此问题随机发生。我们的应用程序中没有使用任何缓存。
调试时我发现jpa-repository代码实际上是在调用mysql,它也会获取最新结果,但是当这个调用返回给我们的应用程序服务时,很可能返回值有旧数据。
请帮助我们确定可能的原因。
JPA / Datasource config:
服务方式:
@Override
@Transactional
public List<Event> getAllEvent() {
return eventRepository.findAll();
}
JPARepository:
public interface EventRepository extends JpaRepository<Event, Long> {
List<Event> findAll();
}
答案 0 :(得分:2)
@Cacheable(false)
示例:
@Entity
@Table(name="table_name")
@Cacheable(false)
public class EntityName {
// ...
}
答案 1 :(得分:0)
这可能是因为一些“脏读”。面临类似的问题,请尝试使用事务锁,尤其是“可重复读取”,这可能可以避免此问题。如果我错了,请纠正我。