Spring引导在未启用的情况下缓存结果



几年前我一直在使用Spring引导,但最近我遇到了一个不寻常的错误。当从我的angular应用程序调用spring-boot应用程序的GET API时,它返回的行数少于DB上的实际行数。

上述问题在重新部署spring-boot应用程序时就得到了解决。由于怀疑这是某种缓存问题,我保留了这个标题。

注意:我尚未在应用程序上启用缓存

另一个可疑因素是EntityManager没有刷新。我使用Spring存储库来获取数据,实体管理器不由我的自定义代码处理。所以,我不确定这怎么会发生。

我正在使用AWS RDS postgresql实例作为我的数据库。

经过两天的失败追求,我把它放在这里征求专家的意见

@Data
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uid_gen_seq")
@SequenceGenerator(name = "uid_gen_seq", allocationSize = 1)
@Column(name = "user_id", updatable = false, nullable = false)
private long userId;
private String name;
private String address;
@Column(name = "ph_no")
private String phNo;
@Column(name = "rent_pass")
private int rentPass;
@CreatedBy
private String createdBy;
@LastModifiedBy
private String modifiedBy;
}

控制器方法:

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<UserVO>> getAllUsers()
throws Exception, NoContentException {
return ResponseEntity.ok(userService.getAllUsers());
}

服务方式:

@Override
public List<UserVO> getAllUsers() throws NoContentException {
logger.info("Get all users");
List<User> users = userRepository.findAll();
List<UserVO> userVOs = converter.convertToVO(users);
return userVOs;
}

更新:

我想我已经把可能的病例缩小到1例。这是一个没有刷新的会话。根据我的理解,调用存储库方法会隐式地创建一个会话并关闭它。除非服务或控制器方法已经用@Transactional进行了注释。

在我的案例中,服务方法没有用@Transactional进行注释,会话仍然没有得到刷新。

作为一种变通方法,我用@Transactional(TxType.REQUIRED_NEW(注释了这些方法,以避免使用任何旧会话。到目前为止,这是可行的,但如果没有这种变通方法,我仍然不相信应用程序的行为。

如何插入数据?如果您没有通过应用程序进行插入,则不会重新加载缓存。看到这个答案-实体是否默认缓存在jpa中?

相关内容

最新更新