我希望有一个 Bean 可以运行所有 FreeMarker 模板,并为每个模板实例化一个 FreeMarkerView,以便预加载 Bean。我还想做一些其他类似的优化,这些优化需要 HttpServletRequest。
所以我的问题是:Spring 中是否有任何正常的方法可以在应用程序启动期间在 Spring bean 上运行 init() 方法并为其提供某种 HttpServletRequest?我想避免模拟完整的 HttpServletRequest,并且我知道我总是可以设置一个 Controller 并打开一个套接字并向其发送请求,但我想知道是否有更好或更正常的方法来做到这一点。
肯定还有其他人想要在启动时或计划任务等情况下设置 HttpServletRequest 而不发出 HTTP 请求?
最佳答案
当应用程序启动时,还没有 HTTP Servlet 请求。事实上,Tomcat 在启动期间开始监听和接受 8080 端口上的连接,但仅当所有应用程序都成功启动时才将它们传递给适当的 servlet。这意味着您无法在启动期间调用自己,因为这会导致死锁 - 您正在等待响应,而 Tomcat 正在等待您,而该响应会被阻止。
这也意味着在启动期间根本不可能获得任何 HTTP servlet 请求(至少以 Tomcat 为例),因为还没有任何请求。是的,模拟是正确的方法,但恐怕如果这些库需要 HttpServletRequest
实例,简单的模拟可能还不够。
关于spring - 如何在 Spring 启动期间生成 HttpServletRequest 以进行 bean 初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130390/