Pan*_*ssa 10 java spring request delay postman
所以这个问题已经被问过几次了,但似乎没有人以可以帮助我的方式回答它。我目前正在为处理产品数据的简单应用程序制作后端。它甚至没有使用 JSP,只是一个普通的 Rest 后端。使用 Spring 的 RestController。
“问题”是:启动后的第一个请求比其他所有请求需要更长的时间才能从服务器获得答案。(我只是用一个简单的 JPA 用户实体来测试 Postman)
需要考虑的一些事项:
如何使第一个请求更快/如何强制 Spring 在第一个请求到来之前实际初始化所有内容?
无论如何,一些代码:
用户.java:
@Entity
@Table(name = "users")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@NonNull
private String firstName;
@NonNull
private String lastName;
@NonNull
@OneToOne(cascade = CascadeType.ALL)
private Address billingAddress;
//a bit more. a list and another address
}
Run Code Online (Sandbox Code Playgroud)
用户控制器.java:
@RestController
@RequestMapping("users")
public class UserController {
private final UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping()
public List<User> getAllUsers() {
return (List<User>) userRepository.findAll();
}
//more stuff
}
Run Code Online (Sandbox Code Playgroud)
你自己回答了这个问题。Spring 中的很多东西都是惰性初始化,用于性能和资源消耗优化。用户真的会注意到一个请求花费了 140 毫秒而不是 10 毫秒吗?可能不会。请注意,这不是每个用户一个请求,而是每次启动时每个初始化路径一个请求。
话虽如此......您还回答了如何“修复”它。部署后(我假设通过 CI/CD 自动进行),您提交一个或多个请求(CI/CD 的一部分),这将触发您所需的所有路径的初始化。即,如果您有 5 个数据库连接,则可能需要提交 5 个请求来初始化所有内容。
这是完全可以接受的,并且是一个称为“预热系统”的过程。
| 归档时间: |
|
| 查看次数: |
11088 次 |
| 最近记录: |