我有一个Spring应用程序,使用
现在的问题是,每当我更新实体的某个值时,它有时会在redis中更新,有时则不会。
当我尝试进行调试时,我发现有时第二个应用程序从MySql中读取实体时会选择旧值而不是更新后的值。
有人能建议我如何避免这种情况,并确保第二个应用程序始终从Mysql中选择实体的更新值吗?
@Transactional
方法更新MySQL DB中特定实体的详细信息。在同一个方法中,我试图使用@Async
调用另一个端点(即另一个Spring应用程序),该端点从MySql DB中读取相同的实体并将值更新到Redis存储中。现在的问题是,每当我更新实体的某个值时,它有时会在redis中更新,有时则不会。
当我尝试进行调试时,我发现有时第二个应用程序从MySql中读取实体时会选择旧值而不是更新后的值。
有人能建议我如何避免这种情况,并确保第二个应用程序始终从Mysql中选择实体的更新值吗?
@Transactional
方法完成后,事务才会被提交。因此,根据@Async
方法执行的速度,事务可能(或不可能)已经被提交。为了保持一致的行为,不要在@Transactional
方法中调用@Async
方法,而是创建另一个类,该类先调用@Transactional
方法,然后再调用@Async
方法。 - M. Deinum