【发布时间】:2020-09-07 14:26:28
【问题描述】:
我有一个带有角度前端的 Spring Boot Web 应用程序。当我在 Web 应用程序仍在启动时使用 Angular 应用程序发送请求时,可能会发生 Web 应用程序可以接受该请求并尝试处理它。我相信应用程序能够在 WebSecurityConfigurerAdapter 扩展类被初始化的那一刻接收请求。
当其他类尚未完全初始化时,这会导致问题。例如,当我尝试注销仍然在前端登录的用户时,而 Web 应用程序仍在启动,它可能会导致 SQLException,因为它找不到数据库表 user。
如何防止应用程序在最终类(带有@SpringBootApplication 注释的类)初始化之前接受请求?
【问题讨论】:
-
你的数据库表用户是你的spring-boot应用创建的吗?
-
@cmlonder 是的。表是从实体创建的
-
也许这会有所帮助:reflectoring.io/spring-boot-execute-on-startup。最有可能的
@DependsOn注释和ApplicationReadyEvent事件似乎是一个可行的解决方案。 -
但它已经与您期望的相似。 Spring 开始搜索其 bean(配置等)并将 Bean 注入到从您拥有 SpringBootApplication 的类开始的上下文中(除非您提供另一个上下文进行搜索,默认行为是从您的主类的当前包开始)。您是否使用任何可能在后台进行异步调用的反应式库?
-
@cmlonder 不,我没有。只要在
configure(HttpSecurity httpSecurity)的WebSecurityConfigurerAdapter中定义了API 端点,应用程序就能够接收请求
标签: spring spring-boot spring-mvc