定时器、拦截器

在 boot 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时 任务处理器**@Scheduled**注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz(不做过多介绍)。

定时任务 @Scheduled

java 复制代码
@Configuration //1.主要用于标记配置类
@EnableScheduling // 2.开启定时任务
public class SaticScheduleTask {

    @Resource
    UserService userService;

    //3.添加定时任务 每隔5秒调用一次
    @Scheduled(cron = "0/5 * * * * ?")
    public void configureTasks() {
        userService.addUser();
        System.err.println("执行静态定时任务时间: " + LocalDateTime.now());
    }
}

cron = [秒] [分] [小时] [日] [月] [周] [年]

月份中的日期和星期可能会起冲突,因此在配置时这两个得有一个是 ?


拦截器

SpringMvc的处理拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理,开 发可以自己定义一些拦截器来实现特定功能。

过滤器与拦截器的区别

过滤器:

  • servlet规范中的一部分,任何java web程序都可以使用。
  • 在url-pattern中配置之后,可以对所要访问的资源进行拦截。

拦截器:

  • 拦截器在SpringMvc框架自己的,只有使用了SpringMvc框架工程才能使用。
  • 拦截器只会拦截访问控制器的方法,如果访问的是js,css,image...是不会进行拦截的。

SpringBoot中使用拦截器

  1. 实现HandlerInterceptor接口
java 复制代码
@Component
public class LoginInterceptor implements HandlerInterceptor {

    //preHandle是请求执行前执行的
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("进入拦截器");
        return true;
    }
    
    //postHandler是请求结束执行的 当preHandle返回true才会执行
    public void postHandle.....
       
    //afterCompletion是视图渲染完成后才执行
    public void afterCompletion.....

}

2.实现WebMvcConfigurer接口配置拦截路径

三种方式:

  1. 继承WebMvcConfigurerAdapter spring5.0 以弃用,不推荐
  2. 实现WebMvcConfigurer 推荐
  3. 继承WebMvcConfigurationSupport 会导致springboot自动配置失效
java 复制代码
@Configuration
public class WebJavaBeanConfiguration implements WebMvcConfigurer {
    
    @Autowired
    private LoginInterceptor loginInterceptor;

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
        .addPathPatterns("/**")
        .excludePathPatterns("/user/login")
        .excludePathPatterns("/user/logout");
    }
}

addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例

addPathPatterns:用于设置拦截器的过滤路径规则

addPathPatterns("/**")对所有请求都拦截

excludePathPatterns:用于设置不需要拦截的过滤规则

拦截器主要用途:进行用户登录状态的拦截,日志的拦截等

相关推荐
lsx2024064 分钟前
CSS 网页布局:从基础到进阶
开发语言
挺菜的7 分钟前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
蜗牛沐雨9 分钟前
警惕 Rust 字符串的性能陷阱:`chars().nth()` 的深坑与高效之道
开发语言·后端·rust
2401_8582861141 分钟前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
掘金-我是哪吒1 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪1 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
wfsm1 小时前
spring事件使用
java·后端·spring
guygg881 小时前
基于matlab的FIR滤波器
开发语言·算法·matlab
双叶8362 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
微风粼粼2 小时前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo