gpt4 book ai didi

java - Spring Boot 正在缓存结果而不启用它

转载 作者:行者123 更新时间:2023-12-01 17:35:11 25 4
gpt4 key购买 nike

我使用 Spring boot 已经有几年了,但最近我遇到了一个不寻常的错误。从我的 Angular 应用程序调用 Spring Boot 应用程序的 GET API 时,它返回的行数少于数据库中存在的实际行数。

重新部署 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;
}

Controller 方法:

@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。那是 session 没有刷新。根据我的理解,调用存储库方法会隐式创建一个 session 并关闭它。除非服务或 Controller 方法已使用@Transactional 注解。

在我的例子中,服务方法没有用 @Transactional 注释, session 仍然没有刷新。

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

最佳答案

如何插入数据?如果您不通过应用程序插入,则不会重新加载缓存。请参阅此答案 - Are entities cached in jpa by default?

关于java - Spring Boot 正在缓存结果而不启用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61054883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com