定时器、拦截器

在 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:用于设置不需要拦截的过滤规则

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

相关推荐
lb29174 分钟前
关于golang热加载安装,实时响应
开发语言·后端·golang·热加载
A22747 分钟前
自定义线程池 4.0
java·线程池
陈奕迅本讯11 分钟前
并发编程-Synchronized
开发语言·c#
康小庄11 分钟前
AQS独占模式——资源获取和释放源码分析
java·开发语言·jvm·spring boot·spring·spring cloud·nio
阿昌喜欢吃黄桃17 分钟前
mac安装mvnd结合idea
java·maven·idea·编译·打包·mvnd·编译打包
草明19 分钟前
macOS 查看当前命令行的ruby的安装目录
开发语言·macos·ruby
汤姆yu26 分钟前
基于python大数据的nba球员可视化分析系统
大数据·开发语言·python
xx155802862xx28 分钟前
centos转移mysql的数据存储目录
linux·mysql·centos
进击的CJR30 分钟前
MySQL 8.0 OCP 英文题库解析(十五)
数据库·mysql·开闭原则
feifeigo12333 分钟前
python从环境变量和配置文件中获取配置参数
开发语言·python·adb