拦截器
- preHandle返回为true,表示放行该请求
# false false false1-preHandle# true false false1-preHandle2-preHandle1-afterCompletion# true true false1-preHandle2-preHandle3-preHandle2-afterCompletion1-afterCompletion# true true true1-preHandle2-preHandle3-preHandle3-postHandle2-postHandle1-postHandle3-afterCompletion2-afterCompletion1-afterCompletion事件发布/监听
完整启动事件顺序(从启动到关闭)
- ApplicationStartingEvent
应用刚启动,上下文、环境还未创建,最早事件。
👉 用途:全局前置初始化、底层拦截。 - ApplicationEnvironmentPreparedEvent
环境 Environment 已创建、配置文件(yml/properties)已加载完毕,容器未创建。
👉 用途:修改配置、动态设置环境变量、解密配置。 - ApplicationContextInitializedEvent
IOC 容器 ApplicationContext 已创建,未刷新、Bean 未加载。
👉 用途:容器级初始化、注册自定义组件。 - ApplicationPreparedEvent
容器已加载 Bean 定义、自动配置已解析,Bean 还没实例化、Tomcat 未启动。
👉 用途:修改 Bean 定义、动态注册 Bean。 - ApplicationStartedEvent
Spring 容器刷新完成、内嵌 Tomcat 启动成功,单例 Bean 全部初始化完成。
👉 用途:服务启动后轻量业务初始化。 - AvailabilityChangeEvent(Liveness)
标记应用存活就绪。 - ApplicationReadyEvent
整个项目完全启动完成,可以对外提供服务。
👉 常用:项目启动完成后执行任务(初始化缓存、定时任务、初始化数据)。 - AvailabilityChangeEvent(Readiness)
标记应用可接收流量。
关闭事件
- ApplicationFailedEvent
项目启动失败、异常崩溃时触发。
👉 用途:异常告警、记录启动日志、资源释放。 - ContextClosedEvent
容器关闭、项目停机时触发。
👉 用途:优雅停机、释放连接、销毁资源。
屏蔽数据库
// 主入口类@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})